前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言函数求参数顺序问题

C语言函数求参数顺序问题

作者头像
用户6755376
发布2019-11-19 22:19:58
2.5K0
发布2019-11-19 22:19:58
举报
文章被收录于专栏:计算机二级C语言

首先,看一道某年全国二级C语言考试的选择题。

问以下代码输出结果

代码语言:javascript
复制
int func(int a,int b)
{   int c;
     c=a+b;
     return c;      }
main()
{    int  x=6,r;
      r=func(x,x+=2);
      printf("%d\n",r);    }

选项大概是 12、14、16、 有误无法运行。

选 14的人占多数,还有不少认为有误无法运行的。

首先,这段代码是可以执行的。

这道题谈不上难,但不知道的就会错。

这道题答案是16。

对于函数的参数,在计算的时候是按照从右往左的顺序进行的。

对于函数func,先求右边x+=2参数,返回x=8,然后计算结果。也就是传递给形参的两个值都是8,返回值为16。

下面我们写程序验证下,并结合自增自减运算升级下难度。

思考下面程序执行结果:

代码语言:javascript
复制
#include<stdio.h>
void fun(int m,int n)
{
    printf("%d+%d\n",m,n);    
}
int main()
{
    int a=100;
    fun(a,a+=2);
    printf("%d,%d,%d\n",++a,a--,++a);
    printf("%d\n",a);
    return 0;    
}

根据上面讲到的内容,你要想到的是printf也是函数,参数计算也要按照从左往右。但这时候涉及到++,多数同学就又会弄不清了。我们看下执行结果,帮助大家理解。

首先,第一行验证了传递给形参的值都是a加2之后值102.

第二行,按照从右往左,第一个是先让a的值+1,输出103。第二个还是a 103。但下一步是先让a的值-1,再计算左边的参数,还是别的呢?

根据运行结果,我们知道是先计算左边参数,a的值+1输出104,然后用完了以后a的值-1。

最后一行输出103也验证了是最后执行a的值-1。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 计算机二级C语言 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档