C编程疑惑 - 函数调用内的函数调用

时间:2014-12-09 10:00:26

标签: c

#include<stdio.h>

find(int x, int y)
{
    return((x<y)?0:(x-y));
}

int main(void) 
{
   int a=find(5,find(5,4));
   printf("%d",a);

   return 0;
}

上面的程序给出了输出为4.我运行了不同的值,并了解到代码片段是找到两个数字的最小值。但是,我似乎无法理解它是如何工作的。有人可以帮我解释一下吗?我知道三元运算符是如何工作的,我没有在函数调用部分中得到函数调用。

4 个答案:

答案 0 :(得分:2)

int a=find(5,find(5,4));

find(5,4) returns 1

find(5,1) returns 4

首先执行find()函数,以5和4作为参数。这将导致x<y条件失败并返回x-y

5-4 =1

稍后您find(5,1)再次使x<y条件无法返回5-1 4

答案 1 :(得分:2)

尝试打破它。 这样看。

当你说int a=find(5,find(5,4));时 然后find函数中的find函数,即find(5,4)返回1; 现在结果值使它成为int a=find(5, 1); 当调用find find(5,1);时,它返回4:)

答案 2 :(得分:1)

“得到”有什么用?

与其他任何调用一样,函数调用是“内向外”评估的。在调用之前必须知道所有参数值。所以,第二个参数是find(5,4),因此该调用首先发生。然后,该调用的值将用作第二个外部调用中的参数。

答案 3 :(得分:1)

要添加到先前给出的答案,最好明确指定函数的返回类型。

find()功能签名更改为

int find(int x, int y);

接下来,关于函数执行顺序,流程为inside-out,表示首先执行内部函数,返回值将用于执行外部调用。

概略地,

 int a=find(5,find(5,4));

可以分解为

 int a=find(5,find(5,4));       //consider step 1.0

           |                   /*inner find() executes first, returns 1*/
           V

     int a=find(5, 1 /*result of find(5,4)*/);       //consider step 1.1

                 |                  /*result of inner find() used for outer find()*/
                 V

         int a=find(5, 1));       //consider step 1.2

                 |              /*outer find() executes second, returns 4*/
                 V

               int a= 4;       //consider step 1.3
                               /* value 4 is assigned to a*/