sizeof是否返回C中某个类型的字节数或八位字节数?

awi*_*ebe 18 c byte sizeof word-size

简单地放入C和变体(与wuss java及其虚拟机不同),不同目标上的基元类型的大小可能会有很大差异,除非您使用定义的固定宽度类型stdint.h,否则实际上无法保证,甚至您的实现也是如此支持他们.

无论如何假设(因为在大多数现代机器上,一个字节是八位字节,为了网络目的,我​​假设(ASCII))sizeof是以字节还是以八位字节的形式返回数据类型的大小?

Kir*_*rov 19

答案:sizeof字节为单位返回类型的大小.


示例:sizeof(char)100%保证是1,但这并不意味着,它是一个八位字节(8位).


标准证明:

在6.5.3.4中,第2点:

sizeof运算符产生其操作数的大小(以字节为单位),该操作数可以是表达式或类型的带括号的名称.大小由操作数的类型确定.结果是整数.如果操作数的类型是可变长度数组类型,则计算操作数; 否则,不评估操作数,结果是整数常量.

...

当应用于具有char,unsigned char或signed char(或其限定版本)类型的操作数时,结果为1.当应用于具有数组类型的操作数时,结果是数组中的总字节数.当应用于具有结构或联合类型的操作数时,结果是此类对象中的总字节数,包括内部和尾随填充.

另外,在第3.6节第3点:

一个字节由一个连续的位序列组成,其数量是实现定义的


Ste*_*non 6

sizeof给出大小的字节数.但是,请注意"字节"是C标准中的技术术语,并且定义为这样sizeof(char) == 1.


Jus*_*ier 5

sizeof始终返回大小作为字节数.但根据维基百科:

在编程语言C和C++中,一元运算符sizeof用于计算任何数据类型的大小,以表示类型所需的字节数来度量.此上下文中的一个字节与unsigned char相同,并且可能大于8位,尽管这种情况并不常见.