C语言系统问题----高手请帮忙,拜托

来源:百度知道 编辑:UC知道 时间:2024/08/22 14:01:12
main()
{
int i=3,j=3,m;
m=(i++)+(i++);
printf("m=%d",m);
printf("q=%d",(j++)+(j++));
}
程序运行后的结果为m=6
q=7
这两个结果应该是不同的C语言版本所产生的结果,但在TC2.0中同一个程序中,只是位置不同却出现不同的结果,哪位高手知道,请多多帮忙;
就是上面那个程序啊,(i++)+(i++)运算赋值后再输出,和直接在输出函数里输出的结果有本质的区别,应该说它们的运算方向不同,用++和--的不同组合也会得到不同的值,你不信试试看。

在我看来
m=(i++)+(i++),m=6是对的
m=(++i)+(++i); m应该等于10

但是printf("q=%d",(j++)+(j++)); q为什么等于7,这个比较奇怪

只能说明编译器在这个等式里优先运算了一个小括号

明白楼主的意思了。

我用VC6.0编译,结果都是6。

这种题目不是很有意义

不能在一条语句中对同一个变量使用++两次,这是未定义行为,不同编译器会得到不同结果。
所以m=(i++)+(i++)和(j++)+(j++)都是错误的语句。

比如
i = 3;
m = (++i) + (++i);通常得到的不是你想要的4 + 5而是5 + 5。

而m=(i++)+(i++); 和printf("q=%d",(j++)+(j++)); 反正都是错误的,所以编译器给你返回不同结果也是不值得奇怪。

m = 6 ? 我觉得这可能是7 或 8 啊

算我错了 我运行了 vc++6.0
中 结果为 两个都是6
我看教材说是i++在遇到节点后才进行加运算而节点包括 ‘;’‘,’等等 但运算符(当然包括+)不是,所以上面两个的结果都为6