Kommt kein Error geht aber trotzdem nicht!
-
Mh ja ich darf Array verwenden. Aber ichweiß nicht wie ich der Funktion Sort ein Array übergeben soll?
Okay man könnte "vector" benutzen aber jetzt mal angenommen ich möchte keinen vector verwenden?
Wie würde das dann gehen? Wie soll ich z.B. ein Array "Feld[15]" an meine Funktion übergeben?
Das geht doch nicht oder?Sort(Feld[15]); // <-- hier würde ich ja nur Element 15 übergeben (und das gäbs ja sowieso nicht da mein Array nur 0-14 Elemente hat) .... void Sort(&Referenz[15]) <-- und das is glaub auch totaler Schwachsinn .....Also ich sags ganz ehrlich ich weiß echt nicht wie es geht
. Würde mich jetzt aber interessieren? Kanns mir jemand sagen?
Dankeschön schon mal im Voraus.
-
so zum beispiel:
#include <iostream> using namespace std; void schreibe(int array[]) { for(int i=0;i<5;++i) { //in dem Fall dürfte das array nur 5 Elemente haben cout<<array[i]<<endl; } } int main() { int daten[5]; daten[0]=77; daten[1]=37; daten[2]=56; daten[3]=65; daten[4]=27124; schreibe(daten); //die Adresse des Arrays // oder: schreibe(&daten[0]) cin.get(); }
-
Vorsicht mit dem Wort "Schwachsinn"!
-
@obbba
Jetzt funktionierts, aber ich verstehe es nun überhaupt nicht
Wenn ich es so mache dann is alles toll und es geht:#include <iostream> using namespace std; void Swap(int &a,int &b); void Sort(int array[]); int main() { int data[15]={12,234,2,1,3,89099,23,15,5,10,77,88,54,22,32}; cout << "# UNSORTIERT #\n"; for (int i=0;i<15;i++) { cout << "Feld" << i << ": " << data[i] << "\n"; } Sort(data); cout << "\n\n\n# UNSORTIERT #\n"; for (int i=0;i<15;i++) { cout << "Feld" << i << ": " << data[i] << "\n"; } return 0; } void Swap(int &a,int &b) { int temp=a; a=b; b=temp; } void Sort(int array[]) //<-- Warum kein &? { for (int z=0;z<14;z++) { for (int i=0;i<14;i++) { if (array[i]>array[i+1]) { Swap(array[i],array[i+1]); } } } }Aber ich hab ja gar keine Referenz als Funktions Argument angegeben, warum ist "data" danach trotzdem sortiert? Weil so macht doch die Funktion "Sort" nur eine Kopie von "data" und sortiert nur innerhalb von "array". Oder hat das etwa was mit meiner Funktion "Swap" zu tun? Da bei der ja Referenzen dabei sind? Aber das würde ja dann nur innerhalb der Funktion "Sort" sein? Mh ich blicks einfach nicht.
Ich hätte das so gemacht, so gehts aber nicht:#include <iostream> using namespace std; void Swap(int &a,int &b); void Sort(int array[]); int main() { int data[15]={12,234,2,1,3,89099,23,15,5,10,77,88,54,22,32}; cout << "# UNSORTIERT #\n"; for (int i=0;i<15;i++) { cout << "Feld" << i << ": " << data[i] << "\n"; } Sort(data); cout << "\n\n\n# UNSORTIERT #\n"; for (int i=0;i<15;i++) { cout << "Feld" << i << ": " << data[i] << "\n"; } return 0; } void Swap(int &a,int &b) { int temp=a; a=b; b=temp; } void Sort(int &array[]) //Referenz auf Data sodass alles das in "array" umgeändert wird auch in data umgeändert wird. { for (int z=0;z<14;z++) { for (int i=0;i<14;i++) { if (array[i]>array[i+1]) { Swap(array[i],array[i+1]); } } } }Kannst mir das jemand erklären. Dankeschön schon mal im Voraus.
@Apollon
Was hast du gegen das Wort "Schwachsinn"? Ich hab doch niemand angegriffen, wollte nur damit ausdrücken das meine Denkweise unsinnig sein könnte. Oder ist dir das Wort einfach zu aggressiv. Vll. hab ich dich jetzt auch falsch verstanden!
-
Wenn du array[] übergibst ist es eine Adresse auf den Anfang des Arrays.
-
Also "int array[]" kann ich mir als Zeiger vorstellen, und mit "data" übergebe ich dann die Adresse?
Kann man das so sagen? Dankeschön schon mal im Voraus.
-
Eine Referenz auf ein Array mit genau 15 Elementen kannst du so machen:
void Foo(int (&array)[15]); void Bar() { int data[15]; Foo(data); // und so aufrufen }Besser ist es allerdings meistens eine Range bzw. Anfang + Länge zu übergeben:
void Foo1(int* begin, int* end); // range void Foo2(int* data, size_t lenght); // anfang + länge void Bar() { int data[15]; Foo1(data, data + 15); Foo2(data, 15); }
-
@hustbaer
Geht das mit der Referenz:void Foo(int (&array)[15]); void Bar() { int data[15]; Foo(data); // und so aufrufen }auch irgendwie so, das ich die größe des Arrays als Funktionsparameter übergeben kann, und nicht innerhabl der Funktion festgelegt wird?
Dankeschön schon mal im Voraus.
-
Mh und noch was:
Die Funktion hier:void Foo2(int* data, size_t lenght); // anfang + länge void Bar() { int data[15]; Foo2(data, 15); }blick ich, aber was ist mit der hier:
void Foo1(int* begin, int* end); // range void Bar() { int data[15]; Foo1(data, data + 15); }wie weiß ich da jetzt innerhalb der Funktion wieviele Elemente mein Array hat? Soll mir das "data+15" bzw. *ende sagen? Mh aber wie den? Wenn ich mache cout << *ende << endl; dann kommt immer --> 0 raus. Kannst mir die Funktion nochmal genau erklären?
Dankeschön schon mal im Voraus.
-
Du hast dort einfach einen Zeiger auf das erste und das letzte Element. Da der Speicher von Arrays nun zusammenhängend allokiert wird, kannst du einfach solange von begin aus iterieren, bis du bei end ankommst. So:
while(begin != end) { cout << *begin; //oder halt sortieren, aber das dereferenzieren nicht vergessen begin++; }