2016-09-27 92 views
-1

這裏有兩條指令:爲什麼這兩個說明的大小有所不同?

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

我發現size_11size_24。我想知道爲什麼他們改變這種方式

+0

int的開始和結束之間的距離是1 int或4個字符(在您的系統上) –

+0

我不明白在這個問題上downvote。雖然這是一個初學者級別的問題,但我有興趣查明除了已經給出的答案以外是否還有其他答案。 – legen

+0

用'sizeof(int)'分隔'size_2',結果等於'size_1'。 – Peter

回答

2

根本原因是int是在您的系統上4個字節,而char是1個字節。代碼(&p+1)將在p之後返回指向內存地址4個字節(sizeof(int))的指針。然後,當你分配給size_1您在條款要求你的答案上int大小,這樣你可以獲得1. size_2,你問在char大小,這給地址之間的差別4.

3

這是基本的指針運算。過分簡化一點,減去兩個int*產生適合兩個指針(一個)之間的int的數量,而減去兩個char*產生適合指針之間的數量char(在您的系統上,它恰好是四個,因爲int是四字節寬)。

相關問題