c语言相关问题:函数返回局部指针变量

如图,注释fun2(),输出为5;不注释fun2(),输出为10。。。想不明白,求大神给个回答。。财富不多,,望大神别嫌弃。。... 如图,注释fun2(),输出为5;不注释fun2(),输出为10。。。想不明白,求大神给个回答。。
财富不多,,望大神别嫌弃。。
展开
 我来答
realjiangms
2015-11-28
知道答主
回答量:29
采纳率:0%
帮助的人:14万
展开全部
首先你要理解运行时执行栈的概念,运行在一个函数中的时候,局部变量是依次压在栈区的,函数返回后释放,相同的地址可能被下一个运行的函数中的局部变量重用。
如果注释掉fun2,你只调用了fun1,局部变量p1的值为fun1里面j所占的地址,内容为5,返回后p=p1, *p 为 5,
如果不注释掉fun2, fun1退出后,执行栈上继续运行fun2.由于fun1的j和fun2的j1所在的偏移相同,它们在实际内存中所占的地址也是相同的,所以p2的值,也就是fun2的j1的地址,也就是fun1的j的地址,它的内容被改为10,所以p现在等于p1等于p2等于j1的地址等于j的地址,所以内容是10

另外,你这个程序肯定是错的,别这么写,考试肯定挂,上班肯定被开除
戚薇QWQ
2015-11-28 · TA获得超过1987个赞
知道大有可为答主
回答量:3917
采纳率:2%
帮助的人:945万
展开全部
你这程序就是错误的,你在试图返回一个局部变量的地址,局部变量在函数调用完以后就会被系统释放它所占的存储空间,所以说你返回一个不存在的变量的地址,就是不合法的!!!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式