die Erklärung gegeben
T a[N][M]; // for any type T
die folgenden Bedingungen erfüllt sind:
Expression Type Decays to Value
---------- ---- --------- -----
a T [N][M] T (*)[M] Address of a[0]
&a T (*)[N][M] n/a Address of a
*a T [M] T * Address of a[0][0]
a[i] T [M] T * Address of a[i][0]
&a[i] T (*)[M] n/a Address of a[i]
*a[i] T n/a Value of a[i][0]
a[i][j] T n/a Value of a[i][j]
&a[i][j] T * n/a Address of a[i][j]
a
, &a
, a[0]
, &a[0]
und &a[0][0]
alle Erhalte den gleichen Wert (die Adresse eines Arrays ist die gleiche wie die Adresse des ersten Elements des ar Ray), aber die Typen der Ausdrücke sind unterschiedlich.
so dass die obige Erklärung gegeben, der Ausdruck a[0]
hat T [M]
(M
-Glied Array von T
) -Typ, die als „abklingt“ T *
eingeben, wenn es der Operanden des sizeof
Anbieters. Der Ausdruck &a[0]
hat den Typ T (*)[M]
(Zeiger bis M
-Elementarray T
).
Angenommen die Erklärungen
T a[N][M];
T *p0 = a[0];
T (*p1)[M] = &a[0];
Anfänglich p0
und p1
denselben Wert (die Adresse des a[0][0]
) enthalten. Wenn wir jedoch den folgenden Code ausführen:
p0++;
p1++;
dann p0
wird die Adresse a[0][1]
enthalten, während p1
die Adresse a[1][0]
enthält. p0++
rückt p0
vor, um auf das nächste Objekt vom Typ T
zu zeigen, während p1++
auf das nächste Objekt des Typs T [M]
verweist.
JETZT VERSTEHE ICH ALLES. Vielen Dank! –