使用它自己的调用作为函数调用语句中的参数

时间:2016-10-18 16:39:19

标签: c

这是我的代码:

#include <stdio.h>

int mul(int,int);

int main()
{    
    int sum,m,n;    
    scanf("%d%d",&m,&n);    
    sum=mul(10,mul(m,n));    
    printf("%d",sum);
}

int mul(int x,int y)    
{    
    int sum;    
    sum=x+y;    
    return(sum);    
}

输入

10

5

输出

25

有人可以告诉我为什么我得到25作为输出?这个函数被调用了2次吗?  一个在参数和其他时间在总和期间?

1 个答案:

答案 0 :(得分:3)

这很简单:

sum=mul(10,mul(m,n));

您正在调用mul(),其中10为第一个参数,mul(m, n)的返回值为第二个参数。

mn分别为10和5,因此mul(10, 5)返回15.然后main函数中的语句将对此进行求值:

sum = mul(10, 15);

这是25。

TL; DR: 是的,mul()被调用两次。以mn作为参数。第二次使用mn之和,添加10

使用调试器,或者甚至查看编译器生成的汇编器输出会告诉你,mul有2次连续调用。
是的,正如其他人正确指出的那样:阅读帮助部分(特别是how to ask)将是一个好主意。它解释了您希望自己进行合理的调试/诊断步骤。只有这样才能解决问题,你应该在这里发一个问题:

  

解释你是如何遇到你想要解决的问题,以及任何阻碍你自己解决问题的困难。

你只是声明,给定输入X,你得到输出Y,你不知道为什么。