取決於你編譯應用類型的指針的大小。
指針就像是在32位應用程序中的32-bit unsigned int
,因爲它存儲內存位置。
如果應用程序是N-bit
應用程序,任何指針的大小將是N bits
長,因爲它需要足夠大以存儲內存位置。
任何N-bit
可以運行的計算機N-bit
應用程序的RAM限制爲2^N bytes
。這使得最大的內存位置ID等於2^N - 1
(因爲0x00000000
是有效的內存地址)。
2^N - 1
要求N bits
以二進制表示,並且我的朋友是爲什麼指針在32位應用程序中的大小爲4個字節的原因。
就拿爲了簡單起見,3-bit
應用爲例:(我寧願不處理大量)
讓我們假設這是一個3-bit
機器上運行。由於2^3 - 1
是可用3 bits
以二進制表示的最大數字,因此係統可以處理的最大內存將爲2^3
字節。 (這些是未簽名的。負內存地址不存在)
可能的內存地址是:
0x0
(二進制表示:000
)
0x1
(二進制表示:001
)
0x2
(二進制表示: 010
)
0x3
(Binary representation:011
)
0x4
(二進制表示法:100
)
0x5
(二進制表示法:101
)
0x6
(二進制表示法:110
)
0x7
(二進制表示法:111
)
因此,指針指向一個內存地址在這種情況下需要有3 bits
。
將3
替換爲32
這將適用於您在此處所做的事情。
(矯枉過正的回答多少?是的。爲什麼呢?因爲我很無聊。)
在64位上嘗試它,你會發現它是不同的。 :) – Mysticial 2013-03-21 02:05:43
這是一個奇怪的問題;你知道指針是什麼嗎?爲什麼你會期望它有不同的大小? – tenfour 2013-03-21 02:07:21
C++社區只是一個簡單的問題,但我在短時間內收到很多回復。高興!謝謝。 – 2013-03-21 02:13:06