G
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.