Wenn ich ein Array wie folgt deklariert habe:
gespeichert in der Adresse A .
A
Dann ist a + 1 gleich A+2*4 , das ist mir klar, aber warum ist &a+1 gleich A+6*4 ?
A+2*4
&a+1
A+6*4
a ist ein Array von int[2] . Welche hat% 2 * sizeof(int) . Deshalb a + 1 = A + 2*4 . (seit sizeof(int) = 4 in deinem Fall)
a
int[2]
2 * sizeof(int)
a + 1 = A + 2*4
sizeof(int) = 4
Allerdings ist &a ein Zeiger auf int[3][2] . Seit sizeof(int[3][2]) = 6 * sizeof(int) , also: &a + 1 = A + 6*4
&a
int[3][2]
sizeof(int[3][2]) = 6 * sizeof(int)
&a + 1 = A + 6*4
Dann ist a + 1 gleich A + 2 * 4
Dies liegt daran, dass a zu int (*)[2] abfällt und +1 zu 2 * sizeof(int) .
int (*)[2]
+1
aber warum ist & amp; a + 1 gleich A + 6 * 4?
In diesem Fall gibt &a int (*)[3][2] und +1 Ergebnisse in 2 * 3 * sizeof(int) zurück.
int (*)[3][2]
2 * 3 * sizeof(int)
Weil der Bediener & amp; Vorrang vor Operator + haben.
Tags und Links arrays c++ pointers