Closed PeteHenry closed 9 years ago
sizeof
返回的是字节(byte)。通常,1 byte = 8 bits
. 但这取决于体系结构,并非一定如此。long long
最小长度是 64 bits
,即 8 byte
,故返回 8
。long
最小是 32 bits
,即 4 byte
,故返回 4
。int
最小是 16 bits
,即 2 byte
,但因为我们的机器目前至少是 32 bits 机器了,甚至是 64 bits 机器。所以 int
目前通常被规定为 32 bits
(没错,就是为了和机器的【字】大小对齐),即 4 byte
。而最小长度却被保留下来了(上个时代,16 bits 机器是主流)。这里不存在你说的【自动提升】。unsigned short
与 short
最小都是 16 bits
,即 2 bytes
。2 ** 16 == 65535
,1024 并未溢出。32 bits, 4 byte
,等于 int
的长度;在 64 bits 编译器下,长度为 64 bits, 8 byte
,是 int
的两倍。故 sizeof(p) / sizeof(*p)
的输出在 32 bits 环境下为 1
,在 64 bits 环境下为 2
。short
的确是 2^16
, char
才是 2^8
, - -!!
对于 sizeof(p) / sizeof(*p)
p
是指向 int
型的变量, 所以 sizeof(*p)
一定为 4
sizeof(p)
在 64 bits
下为 8
, 在 32 bits
下为 4
, 是这样吧, @pezy thk
@PeteHenry Yes.
话说,最后两个的一开始的答案是:
1
与1/10
。cout << sizeof(arri) / sizeof(*arri) << endl;
我后面的注释如果对,就应该了解了 最后一个,还是不怎么理解 对p
与*p
的理解,如下:Q:
cout << sizeof(p) / sizeof(*p) << endl;
来帮我解释下,谢谢