我最近遇到了一些奇怪的问题,我写了一些代码。
printf("%li\n",(sizeof(char)));
printf("%li\n",sizeof(4*(sizeof(char))));
当我运行代码时,第一行打印“1”,第二行打印“8”。如果我将4乘以1,我会得到4。为什么会这样?
答案 0 :(得分:6)
也许您打算打印4*(sizeof(char))
。那会是4
。
但是你确实打印了sizeof(4*(sizeof(char)))
。 sizeof
产生存储其操作数所需的字节数。
4*sizeof(char)
的类型是size_t
,它是系统上的64位类型,因此您将获得8
作为输出。
您可以通过打印sizeof(123456*sizeof(float))
获得相同的结果。 sizeof
没有告诉你任何关于它的操作数的值,只需要多少字节来存储它。
答案 1 :(得分:0)
4*sizeof(char)
为4,但它是size_t
(通常与long
的大小相同)。它在64位计算机上的大小为8。