c语言函数实参的取值顺序 c语言实参求值顺序
C语言,函数参数求值顺序问题,i++,++i问题
您好,是这样的;函数在传参时是先传右面的,所以导致结果为0;
站在用户的角度思考问题,与客户深入沟通,找到新乐网站设计与新乐网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站建设、网站制作、企业官网、英文网站、手机端网站、网站推广、主机域名、网站空间、企业邮箱。业务覆盖新乐地区。
如果改为p = f ( ++i, i ); 结果就不同了;请采纳
关于C语言的参数传递顺序……
楼主您好,首先您要理解一下i++的行为,即先用i,然后再++,所以,传递参数时先用i=1的值,用完了然后++,即先用x=y=1=i,然后i=2;我把程序给您改一下,你就会根据结果看的很明白了。
#include
stdio.h
int
f(int
x,int
y)
{
printf("x=%d\n",x);//显示传递过来的i值
printf("y=%d\n",y);
//显示传递过来的i++值
if(xy)
return
1;
else
if(xy)
return
-1;
else
return
0;
}
int
main()
{
int
i=1;
int
k;
k=f(i,i++);
printf("i=%d\n",i);//显示执行完函数后i的值
printf("k=%d\n",k);
return
0;
}
结果:x=1
y=1
i=2
k=0
楼主您的部分理解是对的,而结果有时候跟编译器有关,它的编译顺序是不一样的。
f(++i,i)
和f(i,++i)运行结果都与理解一致,
f(i++,i)
和f(i,i++)运行结果与理解不一致;++是一种缩写,对于y=i++,就是y=i,然后i=i+1;对于y=++i,就是i=i+1,然后y=i.
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语言 调用函数是实参是计算好再赋值给形参还是把实参的数直接赋值给形参
函数的参数调用和传递是这样的:
调用子程序或函数
参数顺序(一般是倒序)压入堆栈:如果是数据,直接压栈;如果是表达式,求取其值后将值压栈;变量则将其值取出压栈
进入子程序,子程序分配存放在堆栈中的各数据以临时变量名,这些变量名就是函数头部的参数名,子程序中用这些临时变量名进行运算
如果函数有返回值,返回时需要提供一个返回值,存放在指定位置(一般是个通用寄存器),然后丢弃堆栈中的数据(包括调用时压栈的那些参数),返回调用者调用位置之后继续运行
c语言,实参的求值顺序为从右至左?
正常应该是从左到右的,我的机器上运行结果是2,3,3。
可能有些编译器比较特别从右到左也是有可能的,但是我见过的编译器都是从左到右的。
c语言参数求值顺序
当实参列表包括多个实参时,对实参的求值顺序是不确定的,
有的系统按自左至右顺序求实值,
有的系统则安自右至左的顺序。
许多C版本(如turbo
c
和ms
c)是自右而左的顺序求值
(见谭浩强C语言程序第二版p150)
故上述程序先算i++,
第二个参数的值为i=2之后i的值变为3,
再将i代入第一个参数,
故两个参数的值分别为3,2,所以计算结果为1
网页标题:c语言函数实参的取值顺序 c语言实参求值顺序
本文地址:http://ybzwz.com/article/dooggsg.html