Zeiger auf Array

Dnh

Mitglied
Hallo,

folgendes Szenario:

C:
int *p, z[10] = {0,1,2,3,4,5,6,7,8,9};

p=z[0];
p=z;

Im ersten Fall zeigt p ja auf den Wert des nullten Elements meines Arrays.
Worauf zeigt p im zweiten Fall? Da kein & davorgeschrieben wird, sollte ja auf einen Wert gezeigt werden. Jetzt wird aber ja kein explizites ntes objekt angegeben. Was passiert also?
 

VfL_Freak

Top Contributor
Moin,
Fall zwei sehe ich genauso!

Fall eins bringt bei mir mit VS2017 diesen Compilerfehler!!
Ein Wert vom Typ "int" kann keiner Entität vom Typ "int *" zugewiesen werden

VG Klaus
 

Dnh

Mitglied
Jetzt bin ich ja noch verwirrter als vorher..

anderes Beispiel:

C:
int i = 10, *p;

    p=i;
    printf("%d \n" ,p);
    p=&i;
    printf("%d\n" ,p);
    *p=i;
    printf("%d\n" ,p);
    *p=&i;
    printf("%d" ,p);
 

Dnh

Mitglied
Also mir ist schon klar dass p nicht den wert 10 speichert, aber p zeigt doch auf den Wert der in der Adresse von i gespeichert ist oder nicht?
 

Dnh

Mitglied
Und im zweiten Fall durch das & zeigt p nur auf die Adresse, nicht auf den dort enthaltenen Wert.
Im dritten Fall zeigt p ebenfalls auf die Adresse, nicht den Wert
und im vierten Fall ist es doppelt gemoppelt, entweder verhält es sich wie - * - = + oder es bleibt bei -
 

httpdigest

Top Contributor
C:
int i = 10, *p;

    p=i;
    printf("%d \n" ,p);
    p=&i;
    printf("%d\n" ,p);
    *p=i;
    printf("%d\n" ,p);
    *p=&i;
    printf("%d" ,p);
C:
int i = 10, *p;
p=i; // <- das hier funktioniert nicht!
Du kannst keinen Wert vom Typ int auf eine Variable vom Typ int* zuweisen.
Der Compiler weiß nicht, was du damit meinst.
Du könntest einmal meinen:
C:
p=&i;
Also: p soll nun die Adresse der Variablen i enthalten (das heißt, NICHT 10, sondern irgendeine Adresse halt).
Oder du meinst:
C:
p=(int*)i;
Als: p soll nun als Adresse interpretiert, die 10 enthalten. Wenn du p nun also dereferenzierst, dann greifst du damit auf die Adresse 10 (sehr wahrscheinlich illegal) zu und erwartest, dass der Computer dir die int-Zahl, die in dem Speicher in Adresse 10 steht, zurückliefert.
 

Ähnliche Java Themen

Neue Themen


Oben