您的位置:

c语言参数求值,C语言中参数

本文目录一览:

C语言实参求值顺序。。。

楼主fun(m+3,m++);与fun(m+3,++m);都是所谓“实现未定义的”

关于实现未定义,请参看我的另一篇回答:

本例中涉及函数调用前的参数求值顺序,ANSI C又有规定:函数参数求值顺序是不确定的,编译器制造者可以随意实现。大多数主流编译器求值顺序都是从右向左。你所使用的编译器对这两例语句输出的结果表明它是从右向左求的。

fun(m+3,m++);中先求得m++,它返回m后编译器有两种选择:一种先求得m+3再m自增,一种先自增再求得m+3。遗憾的是,这也是未定义的,编译器可以随意做出选择。你的编译器选择了前者,得到的结果是8,5。

对后一个调用应该是没什么疑惑了。注意,疑惑都是产生于x++,像++x这种代码是明明白白的。所以尽量不要在复杂表达式中用后置自增自减

C语言求值

nt WF(int x, int y){

   x=x+y;//x=3+5=8

   y+=x;//y=y+x;y=5+8=13

   return x+y;//13+8=21

}

所以,第一题的结果是21

2.第一个LA计算的是数组的前三项和1+2+3=6,第二个是数组后三项的和3+4+5=12

  所以输出b的值为6+12=18

c语言参数求值顺序

一直以来,++ --语法浪费了太多人的时间。说句实在话,++ -- 在C语言中其实是一个很细节的语法,除了表达简练外,真的没有什么其它的好处了。

由于中国的C语言教程长期以来被谭浩强主宰,而谭又错误的把++ --作为一个C语言重点来教,并增加了一些难点,把本来很简单的语法,搞得复杂无比!

简单的来说,++i 和 i++,在单独使用时,就是 i=i+1。

而 a = ++i,相当于 i=i+1; a = i;

而 a = i++,相当于 a = i; i=i+1;

如果实在搞不明白++ --怎么回事,那也不是什么天塌下来的事。

因为a=++i完全可以写成 i++; a=i。

a=i++完全可以写成 a=i; i++。

而且,这也是一种好的程序风格:++ -- 语句如非特殊需要,请单独一行使用