Wie diese int arr[3] = {2, 3, 4}
Anweisung in memory
gespeichert werden? arr
ist ein lokaler Variable und es wird in Stapel Abschnitt RAM gespeichert werden, übernimmt Startadresse ist 0x100
arr[0] arr[1] arr[2]
|--------------------|
| 2 | 3 | 4 |
|--------------------|
0x100 0x104 0x108
arr
p
Als nächstes p = (char*)((int*)(p));
hier zuerst p
in int pointer
umgewandelt und später umgewandelt wieder in char pointer
also noch p
zeigt nur auf 1st byte
.
Also, wenn Sie ausführen erste printf
printf("%d, ", *p);
hier p
ist char pointer
und es wird holen, was die Daten in 0x100
zu 0x101
ist was 2
so druckt er 2
Als nächstes, wenn Sie dabei
p = (int*)(p+1); // here first p+1 will happen means 0x101 which is converted later into int pointer , but only in this statement(typecasting effect will be in this statement only .
Wenn Sie den nächsten printf drucken, ist immer noch char pointer
, also wird nur 1 byte data
abgerufen, nicht 4 byte
.
printf("%d", *p);// it will print what is the data in 0x101 ? it's 0 check the binary representation of array
Testfall: wenn p = (int*)(p+1)
innen printf
geputtet haben könnte dann ergibt es unterschiedliche Ergebnisse, für beispiels
printf("%d\n",(int*)(p+1))
Ich hoffe, es hilft.
In C ist char ein einzelnes Byte und int ist 4 Byte (oder 2 Byte). Denk darüber nach, was du tust. Was Sie tun, ist sehr verworren, wahrscheinlich weil jemand es speziell so entworfen hat, um den Punkt zu illustrieren. – realharry
'p = (int *) (p + 1);' Hat undefiniertes Verhalten, denke über den Unterschied zwischen 'sizeof char' und' sizeof int' nach. – George
Bitte schreiben Sie Englisch, n dis inkomprhnzbl tn sp33k! –