请问一下为什么结果是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;
}
展开
 我来答
kingkate2009
2012-07-15 · TA获得超过535个赞
知道小有建树答主
回答量:557
采纳率:50%
帮助的人:284万
展开全部

输出的结果不是123,而是随机数。

具体如下:

程序从main()函数开始,第一句:调用f1();

可知n=123,f1()=123;

但是由于没有输出语句(cout<<f1()<<endl;),所以这时程序不会输出123;

第二句:调用f2();

可知m=随机数,f2()=随机数。因为没有初始化赋值!

又由于使用了cout输出语句,所以输出的是一个随机数!

参考调试下图:

希望对你有所帮助!

追问
这本书上解释说是在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()的值也没有初始化,因此才会输出一个随机值。
供扰贾K
2012-07-12 · TA获得超过378个赞
知道小有建树答主
回答量:203
采纳率:0%
帮助的人:293万
展开全部
作为函数内部的变量m没有初始化,所以对于函数f2(),没有返回结果,这也就是为什么你看到输出结果是123;
如果m是在函数外部定义的,则如果未赋值会被初始化为0,这样的话最后的输出结果就是0.
追问
请问为什么输出的是f1中n的值  请叙述一下具体的调用过程,为什么这里的m存放的内存位置是n的数值呢?谢谢
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式