Arrays und Pointer(arithmethik)
-
Hey,
kann mir jemand erklaeren, worin der Unterschied zwischen diesen beiden Deklarationen liegt, oder ob sie gar gleich sind...
int *(arrayXYZ[10]); int *arrayXYZ[10]; int (*arrayXYZ)[10];
Beim 3. bekommt man nen Array mit Pointern right?
Beim 2. bekommt man den Pointer auf den 1. Eintrag und beim 1.?Vielen Dank im vorraus.
-
-- deleted --
-
int *(arrayXYZ[10]); /* wie 2. - Klammern sind überflüssig */ int *arrayXYZ[10]; /* Array aus 10 Zeigern auf int */ int (*arrayXYZ)[10]; /* Zeiger auf Array aus 10 ints */
-
Was ist eigentlich der Unterschied zwischen
int (*arrayXYZ)[10];
und
int *arrayXYZ;
?beide Male kann ich ja problemlos sowas machen:
arrayXYZ[1132392] = 4;
-
Der unterschied zwischen int (*arrayXYZ)[10] und int *arrayXYZ ist das du bei int *arrayXYZ einen Pointer auf int hast, den du natürlich auch auf ein 1 dim int array setzen kannst und dann mit arrayXYZ[1132392] = 4; den 1132392. Element den wert 4 zuweisen kannst (zugriff auf 4 Bytes) int (*arrayXYZ)[10] ist jedoch ein pointer auf ein array von int. du kannst zum beispiel folgendes machen:
int arr2dim[1200000][10]; int (*arrayXYZ)[10]; arrayXYZ = arr2dim;
das heißt arrayXYZ zeigt jetzt auf ein 2 dim array, aber mit arrayXYZ[1132392] = 4 greifst du jetzt auf das 1132392 arrayelement (was ein 1dim array von 10 int-werten ist) zu, dh. es ist ein zugriff auf 40 Bytes, was der compiler nicht zulassen wird, weil die Typen nicht übereinstimmen (Typ 4: int, Typ arrayXYZ[1132392]: int
ein weiter unterschied besteht nun, das bei der 1. variante von array[1132392] um 1132392 * 4 = 4529568 Bytes weitergegangen wird, bei der zweiten variante aber um 1132392 * 4 * 10 = 45295680 Bytes weitergegangen wird.