C程序有关自加的问题!!

发布时间:2024-05-24 07:29 发布:上海旅游网

问题描述:

main(){
int i=5,j=5,p,q,s,a;
q=(++j)+(++j)+(++j);
p=++i;
s=++i;
a=++i;
p=p+s+a;
printf("%d,%d\n",p,q);
}
请指点 为什么上段程序执行的结果是 21,22
p和q的值竟然不一样?
运行环境VC++6.0 程序运行的结果就是21 和22 ,不明白,所有问原因!谢谢!
icerwolfs 的解释有些不明白,为什么放到寄存器中是7+7,而不是6+7呢?

问题解答:

算q时的计算步骤如下:
1、先算(++j)+(++j),并将结果存入到寄存器,这样两次++j使得j变成了7,然后从内存中取出j相加结果=14存入寄存器中。
2、第三个++j,使得j变成了8,将寄存器中的14与8相加得到22

补充:自加减优先于加法操作,况且这里还打了括号,所以先会对j进行两次自加减操作后,再将j从内存中取到寄存器中进行加法操作(++j本来就是先在内存里做自加减,再取出到寄存器)。
haixin1027说得不对,在汇编级只能实现两个数相加,而不能实现三个数连加,所以先会计算出(++j)+(++j),再将结果和(++j)相加。

有意思,和我这个程序有一拼
#include <stdio.h>
main()
{ char s[]="123",*p;
int a=1;
printf("%d%d%d\n",++a,a++,a);
p=s;
printf("%c%c%c\n",*p++,*++p,*p);
printf("%c%c%c\n",*--p,*p--,*--p);
}

q=(++j)+(++j)+(++j);
即先将j的值增1三次。然后把j+j+j的值赋给q,执行后的q值为24,j的值为8.

下同三楼:
p=++i;这个语句完成时应该是:p=i=6
s=++i;这个语句完成时应该是:s=i=7
a=++i;这个语句完成时应该是:a=i=8
所以p=6+7+8=21

所以觉得你的答案应该为: 21 24

q值是先做++j运算,然后在相加,q=8+8+8=24
p=++i;这个语句完成时应该是:p=i=6
s=++i;这个语句完成时应该是:s=i=7
a=++i;这个语句完成时应该是:a=i=8
所以p=6+7+8=21
应该是这样的运算顺序吧,好久不分析c了,应该还是对的吧!

这跟++的先后有关系
主要跟你用的C的编译程序有关,tc与从c++的结果不一样,这是正常的,他们的编译过程不一样,就是说它们有的是从走往右,有的是从右往左

热点新闻