【发布时间】:2015-10-22 15:19:50
【问题描述】:
如果这是非常初级的,我深表歉意,但我刚开始在学校编程,我已经到处寻找解决方案,不幸的是没有任何帮助。 我有这段代码:
#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=='。 return 'c + b + a;' 的作用是什么,当我用逗号替换 + 运算符时,只有输出中的第一个值(无论我放置变量的顺序如何,都是 11)出现,其余的都是 0。
请帮忙解决这个问题,我非常难过,已经做了几个小时了,但还是一无所获。
【问题讨论】:
-
我相信缺少一段代码。您是否可以添加它并更好地澄清您不理解的地方?
-
不,就是这样。这正是上述内容的输出。我试图了解第一个输出是 6 1 1,而第二个输出是 11 7 2,我不明白第二个输出是如何发生的。
-
请注意,我们在这里处理 两组 局部变量。
logic()的参数名为a和b,但这些名称是 local 到logic()的,与main()中声明的a和b无关. -
好的......所以请注意解释,如果 main 的本地值与逻辑值不同,那么输出是如何得到这样的答案的。
-
另请注意,输出 仅来自
printf(...)行。return b + a + c;计算 b、a 和 c 的总和,并将总和的值作为函数的结果返回以供进一步计算。因此,要更改屏幕上 输出 的外观,您必须更改printf行,这与计算总和的顺序完全无关。
标签: function call walkthrough