可能重複:
What the pointer size in 64 bits computer in C++?指針大小不正確
我在大學STUDING℃。
我嘗試安裝在Windows 7/8編程環境和有問題
此代碼:
int main()
int *p;
printf("%d",sizeof(p));
return 0;
}
打印紙4,而不是8(8打印在大學)。 我能做些什麼?
我的Windows是64位和x64處理器。
可能重複:
What the pointer size in 64 bits computer in C++?指針大小不正確
我在大學STUDING℃。
我嘗試安裝在Windows 7/8編程環境和有問題
此代碼:
int main()
int *p;
printf("%d",sizeof(p));
return 0;
}
打印紙4,而不是8(8打印在大學)。 我能做些什麼?
我的Windows是64位和x64處理器。
您可能將代碼編譯爲32位應用程序。您需要將其編譯爲64位應用程序。檢查你的編譯器設置。沒關係你的操作系統是64位的。
好,那麼編譯我可以用來編譯爲64位應用程序? 我的編譯器是minGW gcc。 –
@AndreyDobrikov:我會用VS 2012,但它更像是一個C++編譯器。對於C你可以嘗試mingw-w64。 –
@AndreyDobrikov嘗試'-m64'作爲編譯器參數。 – RedX
這裏的「問題」取決於編譯體系結果。
C中的基本類型(例如int
,double
,char
)沒有預定義的大小;編譯器決定使用哪種類型的大小。
至於指針,你通常希望能夠解決你的機器上任何可用的內存位置。 在32位體系結構上,地址範圍是2^32。由於指針不過是指內存位於的地址的數字,所以2^32個地址(即,4字節的範圍)恰好適合。
對於64位系統,爲了尋址所有存儲器,需要2^64(即8個字節)的範圍。
因此,指針大小需要依賴於系統架構。
請記住:所有指針類型(無論是int*, char*, double*
還是其他)都有相同的大小!因此在32位上使用整數和整數指針可能會有點混淆,因爲在大多數體系結構中,int
的大小也是4字節。
可能您的編譯器會編譯x86 CPU的代碼。什麼是編譯器和哪些選項被包含在內?視覺工作室?如果是這樣,你應該編譯x64位應用程序,據我所知,默認情況下,它編譯32位應用程序。 –
編譯爲32位應用程序? –
這不是問題的原因,但'sizeof'返回'size_t'。當你調用printf(「%d」,...)時,你應該使用'printf(「%zu」,...'或簡單地將'sizeof'的結果轉換爲' int'。 –