【发布时间】:2015-11-16 08:24:17
【问题描述】:
我写了这段代码:
#include<stdio.h>
int valFunc(int val){
return val;
}
int main(){
int a = 5;
int b = 7;
printf("%d",valFunc(a)+valFunc(b));
return 0;
}
在main()的printf()函数内部,调用valFunc(a)后返回值为5,其中主函数在调用 valFunc(b) 之前会保存这个值 5 吗?
我知道如果这个函数像下面这样写,那么它会将函数 valFunc(5) 和 valFunc(7) 的返回值保存为整数变量分别为 a 和 b。 :
#include<stdio.h>
int valFunc(int val){
return val;
}
int main(){
int a = valFunc(5);
int b = valFunc(7);
printf("%d",a+b);
return 0;
}
但是在以前的代码中,我无法理解函数将返回值保存在哪里?它是否创建隐式变量并在调用其他函数之前使用它们来保存进度,或者是否有其他机制?请解释一下。
在调用其他函数之前,它是否会创建任何临时变量来将这些值存储在 运行时堆栈 中?在我在问题中编写的第二个代码中,很明显 main() 会将这些值存储在 a 和 b 中并将它们放入在运行时堆栈上。但是 main() 将如何为第一个代码执行此操作,因为没有变量?
【问题讨论】:
-
这更像是 C++ 临时对象,请参见:stackoverflow.com/questions/9109831/…
-
请指定 C 和 C++ 中的一种,因为这两种语言对于在这种情况下发生的事情有不同的概念。我将您的问题重新标记为 C,因为您的所有代码看起来都像 C 代码。