
请问一下为什么结果是123 讲一下具体的函数调用的过程 谢谢
#include<iostream>#include<math.h>usingnamespacestd;intf1();intf2();intmain(){f1();co...
#include<iostream>
#include<math.h>
using namespace std;
int f1();
int f2();
int main()
{
f1();
cout<<f2()<<endl;
}
int f1()
{
int n=123;
return n;
}
int f2()
{
int m;
return m;
} 展开
#include<math.h>
using namespace std;
int f1();
int f2();
int main()
{
f1();
cout<<f2()<<endl;
}
int f1()
{
int n=123;
return n;
}
int f2()
{
int m;
return m;
} 展开
展开全部
追问
这本书上解释说是在f2中没有初始化的变量m,并且在c++也没有默认初始化,其值为原内存的值,而原内存的值恰巧是存放f1中123的值。原因是函数调用机制。解释说是在返回主函数时的局部变量和形参都消失,但是相对应的内存中内容还存在,所以输出是123.请问一下 这个解释是不是错误的 您怎么理解?
追答
这个解释的过程是正确地,但是结论是错误的,根据我上边的分析,可以看出f2()中的变量却是没有初始化,因此其值为内存中的一个随机值。而f1()中的变量n用123进行复制了,有了具体的地址了,所以f1()的返回值为123。
解释说的局部变量和形参都消失,这是正确的。因为在本例来看,局部变量m,n,在调用完f1(),f2()之后都已经消失,这点通过我的截得那个调试图就可以看出来,在调用f2()的时候,f1()的变量n已经不存在了,因此,当f2()执行完,返回主函数时,m将也不复存在,存在的只是函数的返回值,所以解释说的相对应的内存中的内容还存在其实应该是两个函数的返回值还存在。
而这里之所以没有输出123的原因是,内存中有是对的,但是你没有提出要输出这块内存空间里的内容的要求啊!而第二句f2()是提出要输出的。但是由于m没有初始化,导致f2()的值也没有初始化,因此才会输出一个随机值。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询