2016-07-03 22 views
-2

因此,這裏是我的代碼:爲什麼undereferenced指針具有不同勢的sizeof比提領 - C++

cout << "The size of an integer is " << sizeof(int) << endl; 
cout << "The size of a double is " << sizeof(double) << endl; 
cout << "The size of a string is " << sizeof(string) << endl; 
int num = 1234; 
cout << "The size of a num is " << sizeof(num) << endl; 
int *pnum = &num; 
cout << "The size of a pointer pnum is " << sizeof(pnum) << endl; 
cout << "The size of a value pointed at by pnum is " << sizeof(*pnum) << endl; 
return 0; 

林通過此塊的代碼混淆,因爲這個輸出是:

The size of an integer is 4 
The size of a double is 8 
The size of a string is 40 
The size of a num is 4 
The size of a pointer pnum is 8 
The size of a value pointed at by pnum is 4 

我想的大小一個指針pnum應該和pnum指向的值相同,因爲我正在看一個教程「Programming C++」,在本教程中他們是一樣的。有人可以解釋爲什麼他們在我的程序中不一樣嗎?

+0

由於基礎dataty pes有不同的尺寸? –

+0

讓我猜,你在64位系統上?然後指針通常是64位,而「int」仍然是32位。 –

+0

在教程中,它只是一個巧合,「int」與「int *」的大小相同。尺寸因系統而異。 – Galik

回答

2

sizeof(pnum)sizeof(int*)完全一樣,表示指向int值的指針所需的字節數。這種指針在64位系統中佔用64位,這是8位字節,如代碼輸出中所示。

與此同時,sizeof(*pnum)sizeof(int)完全相同,因爲*pnum的類型爲int。這種類型通常是32位長,這給我們4個字節。

+0

感謝您的回答。 – slayerr297

1

,並在本教程中,他們是相同的:

的原因可能是對於特定的機器上(就像我自己的32位機)的sizeof(INT)=的sizeof(INT *)= 4 。

你會得到不同的結果的原因是,*pnumpnum指針對象是一個int(4個字節你的機器)和pnum本身就是一個指針(你的機器上的8個字節)

+1

感謝您的回答。現在我開始使用32位機器模式編程,結果與教程中的結果類似。 – slayerr297

+2

@ slayerr297那麼教程是否真的說這些值應該是相同的?如果是這樣,再找一個導師,因爲你現在看的那個人是錯的。 – PaulMcKenzie

相關問題