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

Erk*_*Erk 1 c sizeof

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

printf("%li\n",(sizeof(char)));
printf("%li\n",sizeof(4*(sizeof(char))));
Run Code Online (Sandbox Code Playgroud)

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

M.M*_*M.M 6

也许你打算打印4*(sizeof(char)).那会是4.

但是你真的打印了sizeof(4*(sizeof(char))). sizeof产生存储其操作数所需的字节数.

类型4*sizeof(char)size_t系统上的64位类型,因此您将获得8输出.

您可以通过打印获得相同的结果sizeof(123456*sizeof(float)). sizeof没有告诉你任何关于它的操作数的值,只需要多少字节来存储它.