Ein Array-Name ist ein konstanter Zeiger auf das erste Element des Arrays. So ist Ihre Variable x
ein Zeiger auf &x[0]
oder x ist ein Zeiger auf die Adresse des ersten Elements im Integer-Array x
.
Ein Zeiger ist eine Variable, die eine Adresse speichert. Da der Array-Name ein Zeiger ist, speichert er eine Adresse. In diesem Fall speichert x
die Adresse des ersten Elements, dh die Adresse x[0]
.
Sie deklarieren die Variable ptr
als Zeiger auf eine Variable vom Typ Integer. So speichert ptr
auch eine Adresse bei der Initialisierung.
Daher versucht Ihre Zuweisungsanweisung ptr = &x;
die 'Adresse' einer Adresse zu finden, die bereits dort angegeben ist, als Sie zuvor die Adresse x[0]
in x
gespeichert haben.
Da der Compiler die 'Adresse' der 'Adresse von x [0]' nicht finden kann, wird ein Fehler ausgegeben.
Der richtige Weg, um die Compiler, dass Sie die Adresse x[0]
in den Variablen ptr
speichern mögen zu sagen, ist durch einfaches es folgende ptr = x;
oder, mit anderen Worten zu sagen, ptr
an der Adresse in x
gespeichert gleich ist, und die Adresse in x
gespeichert ist eigentlich die Adresse x[0]
.
Denken Sie daran, dass sowohl ptr
als auch x
Adressen speichern können. Hoffe das hilft zu klären.
Sie sollten stattdessen 'ptr = x;' verwenden, um einen Zeiger einem anderen zuzuweisen – CoryKramer
Wenn 'x' kein Zeiger war (es ist ein Array, also ein Zeiger auf das erste Element im Array), aber nur ein' int' , dann wäre dein Code gültig. Was CoryKramer sagt, ist wahr. – Rorschach
@Rorschach: 'x' ist *** nicht *** ein Zeiger.Es ist ein Array von 5 Ints. Wenn es in einem Ausdruck verwendet wird, wird es zu einem Zeiger auf sein erstes Element zerfallen, aber das bedeutet nicht, dass es * ein * Zeiger ist (und der Unterschied kann sehr wichtig sein, wenn mehrere Ebenen berücksichtigt werden). –