Arrayübergabe -> Zeiger
-
Hallo,
wird hier in beiden Fällen als Parameter ein Zeiger übergeben, der die Anfangsadresse des ersten Arrayelements speichert?int strlen(char*); //Zeiger als Parameter int strlent(char[]); //hire auch? Oder wird das gesamte Array kopiert?Vielen Dank
lg, freakC++
-
freakC++ schrieb:
wird hier in beiden Fällen als Parameter ein Zeiger übergeben,
Ja.
Als Funktionsparameter findet eine Typ-Transformation statt die ein Array auf oberster Ebene durch einen Zeiger ersetzt: T[], T[N] --> T*. Betonung auf "oberster Ebene"; denn zB
int(*)[5]bleibt so, wie es ist, ein Zeiger auf ein 5-elementiges int-Array. Aus int[5][3] wird zB int(*)[3]. Es werden also nicht alle Arrays ersetzt.freakC++ schrieb:
der die Anfangsadresse des ersten Arrayelements speichert?
welches Arrays? Ich sehe keinen Aufruf der Funktionen. "Array-To-Pointer-Decay" ist Dir ein Begriff, ja? (Wenn nicht, such mal danach).
-
Nein, der Ausdruck sagt mich nichts, aber ich bin bereits am Lesen ;).
Ich meine das Array, das übergeben wird.
Mmmh...ich habe echt den Eindrcuk, dass die Autoren meines Buches das Prinzip von Arrays und Pointern selbst nicht verstanden haben, da das gebrachte Statement wieder daraus übernommen wurde.
Danke
lg, freakC++
-
freakC++ schrieb:
Mmmh...ich habe echt den Eindrcuk, dass die Autoren meines Buches das Prinzip von Arrays und Pointern selbst nicht verstanden haben, da das gebrachte Statement wieder daraus übernommen wurde.
Danke
lg, freakC++Welches Buch liest du denn?
-
C++ lernen und professionell anwenden.
Eigentlich finde ich es sehr gut, doch ich bin nun schon über mehrere Stellen gestolpert, die mir hier im Forum anders erklärt worden sind.
lg, freakC++
-
Das ist doch nur eine Spitzfindigkeit. Da wird in der Tat nichts aufgerufen, weil das Deklarationen sind. Aber wenn du diese Funktionen doch mal aufrufst, und ein Array übergibst, dann wird in beiden Fällen ein Zeiger auf das erste Element übergeben.
-
Probier mal etwas mit dem
sizeof-Operator herum. Da sieht man schnell, wo aus einem Array ein Zeiger wird:typedef char Array10Type[10]; typedef char Array20Type[20]; void fun1(Array10Type arr) { std::cout << sizeof(arr) << '\n'; } void fun2(Array10Type & arr) { std::cout << sizeof(arr) << '\n'; } void fun3(char * arr) { std::cout << sizeof(arr) << '\n'; } void fun4(char arr[]) { std::cout << sizeof(arr) << '\n'; } int main() { Array10Type arr10 = {}; fun1(arr10); fun2(arr10); fun3(arr10); fun4(arr10); Array20Type arr20 = {}; fun1(arr20); //okay fun2(arr20); //Fehler. Hier wird ein Array10-Objekt erwartet da T & uebergeben wird fun3(arr20); //okay fun4(arr20); //okay }