ich derzeit in einer CS107 Klasse eingeschrieben bin, die folgenden Annahmen macht:Pointer-Arithmetik umgossen
sizeof(int) == 4
sizeof(short) == 2
sizeof(char) == 1
- big Endian
Mein Professor zeigte der folgende Code:
int arr[5];
((short*)(((char*) (&arr[1])) + 8))[3] = 100;
Hier sind die 20 Bytes darstellen arr
:
|....|....|....|....|....|
Mein Professor erklärt, dass &arr[1]
Punkte hier, die ich mit einigen.
|....|....|....|....|....|
x
verstehe ich jetzt, dass (char*)
den Zeiger macht die Breite eines char (1 Byte) anstelle von der Breite eines int (4 Bytes).
Was ich nicht verstehe, ist die + 8
, die mein Professor sagt Punkte hier:
|....|....|....|....|....|
x
Aber sollte es hier nicht darauf, da es nach vorn 8 mal die Größe eines char wird (1 Byte)?
|....|....|....|....|....|
x
Sie haben Recht.Schreiben Sie einen Code, um die Werte der Zeiger zu drucken, um Ihrem Professor zu zeigen, dass Sie Recht haben. –
Es hängt alles von 'sizeof (int)' ab, was nicht unbedingt '4' ist. –
@BlagovestBuyukliev Mein Professor sagte, dass "sizeof (int)" für die Dauer der Klasse 4 ist. Entschuldigung, das hätte ich erwähnen sollen. – Alexey