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

2019-11-19 22:19:58 浏览数 (1)

首先,看一道某年全国二级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("%dn",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 %dn",m,n);    
}
int main()
{
    int a=100;
    fun(a,a =2);
    printf("%d,%d,%dn",  a,a--,  a);
    printf("%dn",a);
    return 0;    
}

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

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

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

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

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

0 人点赞