這裏有兩條指令:爲什麼這兩個說明的大小有所不同?
int p = 0;
int size_1 = (int*)(&p+1)-(int*)&p;
int size_2 = (char*)(&p+1)-(char*)&p;
我發現size_1
是1
和size_2
是4
。我想知道爲什麼他們改變這種方式
這裏有兩條指令:爲什麼這兩個說明的大小有所不同?
int p = 0;
int size_1 = (int*)(&p+1)-(int*)&p;
int size_2 = (char*)(&p+1)-(char*)&p;
我發現size_1
是1
和size_2
是4
。我想知道爲什麼他們改變這種方式
根本原因是int
是在您的系統上4個字節,而char
是1個字節。代碼(&p+1)
將在p
之後返回指向內存地址4個字節(sizeof(int)
)的指針。然後,當你分配給size_1
您在條款要求你的答案上int
大小,這樣你可以獲得1. size_2
,你問在char
大小,這給地址之間的差別4.
這是基本的指針運算。過分簡化一點,減去兩個int*
產生適合兩個指針(一個)之間的int
的數量,而減去兩個char*
產生適合指針之間的數量char
(在您的系統上,它恰好是四個,因爲int
是四字節寬)。
int的開始和結束之間的距離是1 int或4個字符(在您的系統上) –
我不明白在這個問題上downvote。雖然這是一個初學者級別的問題,但我有興趣查明除了已經給出的答案以外是否還有其他答案。 – legen
用'sizeof(int)'分隔'size_2',結果等於'size_1'。 – Peter