关于C语言中关于最基础的++和--的问题

来源:百度知道 编辑:UC知道 时间:2024/06/05 01:28:30
我是一个C语言初学者,今天在一个C语言的视频教程里看到有这样一道题目:
设i的初始值为3,表达式(i++*++i+i--*--i)=?
我想问
main()
{int i=3,j=0;
printf("j=%d\n",j=i++*++i+i--*--i);
}
输出是j=30

main()
{int i=3,j=0;
j=i++*++i+i--*--i;
printf("j=%d\n",j);
}
输出是j=18
两者的输出为什么不一样?之间到底有什么区别?哪个是对的呢?谢谢!

首先,楼上的,这只是个题目而已。相信都学到++--了,楼主也知道这样的代码是不可取的。你不必把这问题提高到一个什么软件公司聘不聘用的高度。如果真要提高到这个高度,那我要说:对于你这样一个对未知没有求解欲望的人,软件公司也未必想用吧。奉劝楼上的,不会的话就别闭嘴听人家会的是这么说的,别扯那些没用的。

回到正题。

楼主用的应该是TRUBO C编译器。出现两种代码有两个结果的原因是因为TURBO C的编译机制。
第一段代码里的“i++*++i+i--*--i”是作为函数的参数出现在函数printf后边的。而TRUBO C在对函数的参数的处理方式是逐个处理,依次生效。就是说他是顺序处理i++*++i+i--*--i的.先是i++*++i,即3*5=15;然后是i--*--i,即5*3=15;15+15=30.
第二段代码里的“i++*++i+i--*--i”则是一条独立的赋值语句。TURBO C对赋值语句是按照优先级来处理的:先处理前缀,也就是++i和--i。还有一点要注意的就是++i和--i是同时处理的。也就是++i是4,--i是2。那么这条语句的结果就是i++*++i=3*4=12;i--*--i=3*2=6;12+6=18.

++i是在运行前将i加1,i++是在运行后将i加1.

比如

(1)
i=1;
cout<<++i;//此时屏幕输出i为2
cout<<i;//此时屏幕输出i为2

(2)
i=1;
cout<<i++;//此时屏幕输出i为1
cout<<i;//此时屏幕输出i为2

i++和++i的最大区别就是赋值先后的区别了。
首先要理解:
j=i++是先把i的值赋给j后再作自加。
j=++i是i先做自加后再把值赋给j
理解上面问题后
i++*++i+i--*--i
就不难理解了,++ 或--放变量前面是先自加/减再运算,放后面是先运算后自加/减

++i是先将i加1再赋值或别的运算,i++是在使用后将i加1.