2012-11-12 118 views
2

可能重複:
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處理器。

+3

可能您的編譯器會編譯x86 CPU的代碼。什麼是編譯器和哪些選項被包含在內?視覺工作室?如果是這樣,你應該編譯x64位應用程序,據我所知,默認情況下,它編譯32位應用程序。 –

+1

編譯爲32位應用程序? –

+0

這不是問題的原因,但'sizeof'返回'size_t'。當你調用printf(「%d」,...)時,你應該使用'printf(「%zu」,...'或簡單地將'sizeof'的結果轉換爲' int'。 –

回答

5

您可能將代碼編譯爲32位應用程序。您需要將其編譯爲64位應用程序。檢查你的編譯器設置。沒關係你的操作系統是64位的。

+0

好,那麼編譯我可以用來編譯爲64位應用程序? 我的編譯器是minGW gcc。 –

+0

@AndreyDobrikov:我會用VS 2012,但它更像是一個C++編譯器。對於C你可以嘗試mingw-w64。 –

+0

@AndreyDobrikov嘗試'-m64'作爲編譯器參數。 – RedX

1

這裏的「問題」取決於編譯體系結果。

C中的基本類型(例如int,double,char)沒有預定義的大小;編譯器決定使用哪種類型的大小。

至於指針,你通常希望能夠解決你的機器上任何可用的內存位置。 在32位體系結構上,地址範圍是2^32。由於指針不過是指內存位於的地址的數字,所以2^32個地址(即,4字節的範圍)恰好適合。

對於64位系統,爲了尋址所有存儲器,需要2^64(即8個字節)的範圍。

因此,指針大小需要依賴於系統架構。

請記住:所有指針類型(無論是int*, char*, double*還是其他)都有相同的大小!因此在32位上使用整數和整數指針可能會有點混淆,因爲在大多數體系結構中,int的大小也是4字節。