sizeof是怎么样运作的?

来源:百度知道 编辑:UC知道 时间:2024/06/08 09:27:49
#include<stdio.h>
main()
{
int i=3,j;
j=sizeof(++i + ++i);
printf("%d,%d\n",i,j);

}
打印结果是3,4。
那看来sizeof(++i + ++i);这里的i根本就没自增过了!怎么回事呢
其实我是想知道为什么i没被自增到

sizeof是编译器根据当前处理器类型与编译参数来计算的,它是在程序生成前就计算出来的。
例如sizeof(char),编译器计算出它是1,就在程序中嵌入1,所以在执行程序时,是没有sizeof这一步的。

另外,++i + ++i;这个表达式未定义。
在两个序列点之间(也就是这个语句)i的值被修改了两次。不同编译器能对此作出不同编译,结果也不同。关于“实现未定义”,参看:
http://zhidao.baidu.com/question/111663274.html
yyrryyrr2的回答

sizeof()是求某个类型的大小(所占的内存空间),而不是求值!;
楼主没有弄清楚概念。
int i=10000;
int j=sizeof(i);// =4;意思求对象i所占的内存空间大小,单位是字节。所以值为4.

无论你做多少i++,++i,其返回的最终都是一个int对象,而int对象在你当前环境下占用4字节空间。

sizeof 它只是求变量的空间大小

sizeof是指自动计算j所需的字节 进行分配字节