[英]Why is sizeof(int) different than sizeof(int*)?
我想知道為什么在以下程序中sizeof(int)
返回的值不同於sizeof(int*)
。
這是一個小程序:
int main(){
std::cout<<sizeof(int)<<endl;
std::cout<<sizeof(int*)<<endl;
return 0;
}
這是輸出:
4
8
直到現在我記得整數指針的大小是4byte(gcc編譯器)。 如何檢查指針的正確大小? 它依賴於計算機嗎?
我正在運行ubuntu 12.04
# lsb_release -a
Distributor ID: Ubuntu
Description: Ubuntu 12.04 LTS
Release: 12.04
Codename: precise
指針的大小是不是常量(標准大小)8個字節。
int
和int*
大小完全取決於編譯器和硬件。 如果您在int*
看到八個字節,則可能有64位硬件,每個指針轉換為八個字節。
希望這可以幫助!
sizeof(char) == 1
沒有其他保證(*)。
實際上,指針在16位系統上為2,在32位系統上為4,在64位系統上為8。
指針的大小是系統,編譯器和體系結構相關的。 在32位系統上,它通常是32位,而在64位系統上,它們通常是64位。
如果你試圖將指針存儲到一個整數中以便以后再次恢復到指針,你可以使用intptr_t
類型,這是一個足以容納(我相信)普通(非函數)指針類型的整數類型。
對於32位系統,“事實上”標准是ILP32 - 即int,long和指針都是32位數量。
對於64位系統,主要的Unix'事實上'標准是LP64 - 長,指針是64位(但int是32位)。 Windows 64位標准是LLP64 - 長很長,指針是64位(但long和int都是32位)。
有一段時間,一些Unix系統使用了ILP64組織。
這些事實上的標准都沒有通過C標准(ISO / IEC 9899:1999)立法,但所有標准都是允許的。
和
如果您關心可移植性,或者您希望類型的名稱反映大小,則可以查看以下宏可用的標頭:
int8_t int16_t int32_t int64_t
int8_t
保證為8位,int16_t
保證為16位等。
看到這個問題 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.