关于C语言中,用vc++6.0,运算(++i)的问题? 30

我写的程序是这样的:#include<stdio.h>voidmain(){inti=5,j=5,p,q;p=(i++)+(i++)+(i++);q=(++j)+(++j... 我写的程序是这样的:
#include<stdio.h>
void main()
{
int i=5,j=5,p,q;
p=(i++)+(i++)+(i++);
q=(++j)+(++j)+(++j);
printf("%d\t,%d\t,%d\t,%d\t",p,q,i,j);
}
我觉得q的值应该是21,即j=6+7+8=21才对,可计算结果为22,这是什么原因?
展开
 我来答
GTA小鸡
高粉答主

2019-03-30 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2.6万
采纳率:78%
帮助的人:1.3亿
展开全部

任何类似(i++)+(i++)、(++j)+(++j)这样的表达式,都属于未定义行为。也就是说,C语言标准没有规定这样的表达式应该如何计算,由编译器自行决定,因此它们的结果是不确定的,也不具有可移植性,是十分糟糕的表达式。

不要试图研究这样的表达式,也更不要在实际编程中写出这样的表达式。要注意在一条语句中,不要对同一个对象进行两次以上的修改,否则就会产生未定义行为。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式