簡體   English   中英

為什么sizeof(int)與sizeof(int *)不同?

[英]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個字節。

intint*大小完全取決於編譯器和硬件。 如果您在int*看到八個字節,則可能有64位硬件,每個指針轉換為八個字節。

希望這可以幫助!

sizeof(char) == 1

沒有其他保證(*)。

實際上,指針在16位系統上為2,在32位系統上為4,在64位系統上為8。


(*)參見James Kanze的評論。

指針的大小是系統,編譯器和體系結構相關的。 在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM