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



如果这是非常初级的,我很抱歉,但我刚刚开始在学校编程,我已经寻找了所有的解决方案,不幸的是没有什么能帮助我。我有这段代码:

   #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 %.2fn", 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。

请帮助这个,我难以置信的难住了,已经在它几个小时,仍然没有。

我假设要得到第一个输出,逻辑函数对c和f取5和2的值,并将其运行到a和b的函数中。

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

现在让我们看看原来的调用:

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).

相关内容

最新更新