乘以sizeof(char)不仅仅是乘以char的大小

时间:2015-08-29 21:34:04

标签: c sizeof

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

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

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

2 个答案:

答案 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。