处理函数外部的函数调用语法

时间:2015-10-22 15:19:51

标签: function call walkthrough

我很抱歉,如果这是非常基本的,但我刚开始在学校编程,我已经全神贯注地寻找解决方案,不幸的是没有任何帮助我。 我有这段代码:

   #define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int logic(int a, int b)
{
    int c = a % b;
    a++;
    b--;
    printf("==%d %d %d==\n", a, b, c);
    return b + a + c;
}

int main()
{
    int a, c;
    float d, f;
    a = 10;
    c = 5;
    f = 2;

    d = logic(a, logic(c, f));
    printf("%d %d %.2f %.2f\n", a, c, d, f);
    return 0;
}

现在的输出是:

'== 6 1 1==
==11 7 2==
10 5 20.00 2.00'

现在的问题是线'd = logic(a, logic(c, f));'如何编译上面的逻辑函数。我假设得到第一个输出,逻辑函数取c和f的值为5和2,并通过a和b的函数运行它。但我完全不知道为什么下一个输出是'==11 7 2=='。返回'c + b + a;'完全做什么,当我用逗号替换+运算符时,只输出输出中的第一个值(无论我放置变量的顺序是11),其余的都是0。

请帮忙解决这个问题,我感到难以置信的困难,已经好几个小时了,但仍然没有。

1 个答案:

答案 0 :(得分:0)

  

我假设得到第一个输出,逻辑函数取c和f的值为5和2,并通过a和b的函数运行它。

这是正确的。首先发生的事情相当于调用logic( 5, 2 )。注意两件事:a)在函数logic内部,我们有一个printf将一些输出打印到屏幕上,b)函数logic 返回一个值类型为int。 这就是int中第一个int logic(int a, int b)表示的内容。

现在让我们看一下原来的电话:

d = logic(a, logic(c, f));

这告诉机器我们想要获取函数logic返回的值并存储在变量d中。但是,要调用logic,我们需要两个int参数。第一个是作为变量a给出的,但为了找到第二个参数的值,需要先执行一个函数,在这种情况下恰好是logic

这与普通数学相同:要计算f(g(x)),您必须先计算g(x)并将结果用作f的输入。在程序中,您也可以使用另一个变量来存储中间结果,例如int g_result = g(x); f( g_result );这完全等效。

因此,要计算logic(a, logic(c, f));的结果,logic需要运行两次。每次执行logic时,它都会在printf上运行,并在屏幕上生成一些输出。

这就是为什么我们得到两行输出“== ... ==”,每次运行函数logic一次。

如上所述,你可以等同地写:

int first_result = logic( c, f ); // This call produces the output of "== 6 1 1==" and returns the value 8 (= 6 + 1 + 1) which gets assigned to "first_result"

d = logic( a, first_result ); // This call produces the output of "==11 7 2==" from the function parameters "a" (=10) and "first_result" (=8).