C语言++问题

来源:百度知道 编辑:UC知道 时间:2024/06/01 09:34:59
请解释运行结果,说明过程明白的话加分奖励。程序如下:
#include<stdio.h>
void main()
{
int i=3,k;
k=(i++)+(i++)+(i++)+(i++);
printf("i=%d,k=%d\n",i,k);
i=3;
k=(++i)+(++i)+(++i);
printf("i=%d,k=%d\n",i,k);
i=3;
k=(++i)+(i++)+(++i);
printf("i=%d,k=%d\n",i,k);
}
结果为
i=7,k=12
i=6,k=16
i=6,k=13
主要是++i和i++的地方请解释明白。
1楼和2楼的解释书上都有,我不要这些。我不明白的就是第二个为什么得到的结果是16? 其实这是书上的例题,但是用vs6.0出来后就是这个破结果,难道是编译器的原因?

我的是VS2008环境 没办法调试

出来肯定是18 这里边有个数据存贮顺序的问题
我也不知道哪个编译器是按照理论执行的
其实这种东西你把握住 是先执行还是先自增就够用了
具体应用的时候 谁会写k=++i+++i+++i

i++先执行语句 k=i+i+i+i=12 然后i++4次 i=7

++i 先自增 然后执行语句
不知道你的是什么编译器
在vs下运行时先 i++到6 然后k=6+6+6=18

不过看题目 应该是 ++i一次就将值放入k的表达式里
所以 k=6(++i)+5(++i)+4(++i)=15 i=6 你的16我不太明白

第三个表达式
vs下 2次++i i=5 k=5+5+5=15 然后i++ i=6
题目 k=5(++i)+4(i)+4(++i)=13 然后i++ i=6

我就给你解释++i和i++:其他你一看就会了
++i,先将i值加1,在参与其他运算,比如i是3,可以把这个表达式的值看成是:4
i++,先把i拿进去做计算,计算之后,i的值再加1,比如:i=3,(i++)*3就等于9;执行之后,i的值是4,不知道我说清楚没有...

++i,和++i的主要区别:
这个东西记的话,只要看清楚“++”的位置。
在“在i前面”的话就先做自身的+1,运算,然后进行其他运算。
反之,就是先参加其他运算,再做自身的+1运算。

这是在vc6下编译的吧.呵呵.
vc6编译器的规则是这样的.先给你解释一下后++的优先级高于+法的优先级.
以这个
k=(i++)+(i++)+(i++)+(i++);
printf("i=%d,k=%d\n",i,k);
为例.i++先返回i的值再++操作.i=3,表达式先返回i值3; 这是表达式是i+i+i+i 这里的i是i的副本相加即3+3+3+3,而i呢,则++操作,++操作,++操作,++操作.