2016-09-27 3 views
-1

Hier sind zwei Anweisungen:Warum unterscheiden sich diese beiden Anweisungen in der Größe?

int p = 0; 
int size_1 = (int*)(&p+1)-(int*)&p; 
int size_2 = (char*)(&p+1)-(char*)&p; 

Ich fand, dass size_1 ist 1 und size_24 ist. Ich frage mich, warum sie so variieren

+0

Der Abstand zwischen dem Anfang und dem Ende eines int ist 1 int, oder 4 Zeichen (auf Ihrem System) –

+0

Ich verstehe nicht den Downvote zu dieser Frage. Obwohl es sich um eine Anfängerfrage handelt, war ich daran interessiert herauszufinden, ob es andere Antworten als die hier angegebenen gibt. – legen

+0

Dividiere 'size_2' durch' sizeof (int) 'und das Ergebnis ist gleich' size_1'. – Peter

Antwort

2

Die Ursache ist, dass ein int 4 Bytes auf Ihrem System ist, während ein char ist 1 Byte. Der Code (&p+1) gibt einen Zeiger auf die Speicheradresse 4 Bytes (sizeof(int)) nach p zurück. Dann, wenn Sie zuweisen size_1 Sie in Bezug auf int Größen für Ihre Antwort bitten, so erhalten Sie 1. Für size_2 Sie den Unterschied zwischen der Adresse fragt in char Größen, die 4. gibt

3

Dies ist ein grundlegendes Zeigerarithmetik. Übermäßig vereinfacht ein Subtrahieren von zwei int* ergibt die Anzahl von int s, die zwischen den beiden Zeigern passen (eins), während das Subtrahieren von zwei char* die Zahl von char s ergibt, die zwischen den Zeigern passt (auf Ihrem System sind es vier, weil ein int ist vier Byte breit).

Verwandte Themen