#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.我运行了不同的值,并了解到代码片段是找到两个数字的最小值。但是,我似乎无法理解它是如何工作的。有人可以帮我解释一下吗?我知道三元运算符是如何工作的,我没有在函数调用部分中得到函数调用。
答案 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*/