在C中,请帮我看看++(自增)运算符的程序例子的输出,请看补充中的代码,我有些不懂:谢谢!

发布时间:2024-05-29 04:23 发布:上海旅游网

问题描述:

void main()
{int i=5,j=5,q,p;
p=(i++)+(i++)+(i++);
q=(++j)+(++j)+(++j);
printf("%d,%d,%d,%d\n",p,q,i,j);/*这个是怎样输出的,我是这样想的:因为第一次i=5,然后它马上自增1,变为6,再变为7,所以它就是p=5+6+7,所以结果应该是18,可是正确结果却是15,余下的我也理解不对,请你帮我理一下头绪,谢谢*/
getch();
}
正确结果是:15,24,8,8
谢谢你,但我还是不太明白,它不是从左到右计算的吗,先i=5,然后再自增啦,能说详细一点吗,谢谢!

问题解答:

这种++,--的运算结果跟编译器有关,没有统一的答案
但是如果是考试的话,这么理解(VC里是这样的):
p=(i++)+(i++)+(i++);相当于
{
p=i+i+i;
i++;
i++;
i++;
}因为i++是先返回i的值,然后i=i+1;

而q=(++j)+(++j)+(++j);相当于
{
++j;
++j;
++j;
y=j+j+j;
}
++j是先j=j+1,然后返回j的值
但是这种计算毫无意义,也没有实际用途,除了出现在某些无聊的试卷上之外

因为是i++,而不是++i;所以是先使用i里面的内容,然后再自增,就是说在一个表达式里它是最后自增的,理解这一点就行了。而++j就相反了。

++符号在后面的,那么这个式的值为原先的值,只不过输出的i值变了,i++仍然是5,所以p是15。i,j最后的值输出都是加3就是8。
这里的(i++)+(i++)+(i++)中的i的值不会从左到右增加,逗号运算符中会出现。

热点新闻