乘以 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
不会告诉您有关其操作数的值的任何信息,只是需要多少字节来存储它。
最近我编写的一些代码遇到了一些奇怪的问题。
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
不会告诉您有关其操作数的值的任何信息,只是需要多少字节来存储它。