【发布时间】:2019-06-13 23:39:48
【问题描述】:
C 标准在许多不同的地方使用字字节。大多数情况下,它与我对这个词的理解非常相似——8 位长的数据块。
但是:
sizeof 运算符产生其操作数的大小(以字节为单位)
还有:
当 sizeof 应用于 char 类型的操作数时,无符号 char,或signed char,(或其合格版本)结果为1
稍后:
当应用于具有数组类型的操作数时,结果是 数组中的总字节数。
因此,如果我们认为char 的机器具有超过 8 位,则该程序的可观察行为将不同于 8 位字符机器。
char foo[5];
for(size_t index = 0; index < sizeof(foo) / sizeof(char); index++)
{
/* some code */
}
所以可能C标准理解中的字节含义不同。谁能解释一下:字节是 8 位还是字节是不同的东西
还有一个额外的问题。
是sizeof(char) == sizeof(array[0])?考虑字节大小差异
【问题讨论】:
-
一个字节从不保证正好是 8 位——它只是最常见的架构
-
sizeof(char)是 1,所以sizeof(foo) / sizeof(char)是sizeof(foo),即5 * sizeof(char),无论char有多少位,它都是 5。 -
如果表达式
e的类型为T,那么sizeof(e)等价于sizeof(T)。 -
是的,我知道,但忘记了@StroryTeller 回答中提到的 3.6 点
标签: c char language-lawyer sizeof