乘以 sizeof(char) 不同于仅乘以 char 的大小

Multiplying by sizeof(char) is different than just the multiplying by the size of a char

最近我编写的一些代码遇到了一些奇怪的问题。

printf("%li\n",(sizeof(char)));
printf("%li\n",sizeof(4*(sizeof(char))));

当我 运行 代码时,第一行打印“1”,第二行打印“8”。如果我将 4 乘以 1,我会得到 4。为什么会这样?

4*sizeof(char) 是 4,但它是一个 size_t(通常与 long 大小相同)。在您的 64 位机器上它的大小是 8。

也许您打算打印 4*(sizeof(char))。那会给 4.

然而你实际上打印了 sizeof(4*(sizeof(char)))sizeof 产生存储其操作数所需的字节数。

4*sizeof(char) 的类型是 size_t,这是您系统上的 64 位类型,因此您将得到 8 作为输出。

打印 sizeof(123456*sizeof(float)) 会得到相同的结果。 sizeof 不会告诉您有关其操作数的值的任何信息,只是需要多少字节来存储它。