指针的大小取决于您正在编译的应用程序的类型。
指针类似于32-bit unsigned int
32 位应用程序中的 a,因为它存储一个内存位置。
如果应用程序是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
(二进制表示011
:)
0x4
(二进制表示100
:)
0x5
(二进制表示101
:)
0x6
(二进制表示110
:)
0x7
(二进制表示111
:)
3 bits
因此,在这种情况下,需要有一个指向内存地址的指针。
替换3
为32
,这将适用于您在这里所做的事情。
(矫枉过正的回答很多?是的。为什么?因为我很无聊。)