c语言相关问题:函数返回局部指针变量
如图,注释fun2(),输出为5;不注释fun2(),输出为10。。。想不明白,求大神给个回答。。财富不多,,望大神别嫌弃。。...
如图,注释fun2(),输出为5;不注释fun2(),输出为10。。。想不明白,求大神给个回答。。
财富不多,,望大神别嫌弃。。 展开
财富不多,,望大神别嫌弃。。 展开
2个回答
展开全部
首先你要理解运行时执行栈的概念,运行在一个函数中的时候,局部变量是依次压在栈区的,函数返回后释放,相同的地址可能被下一个运行的函数中的局部变量重用。
如果注释掉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
另外,你这个程序肯定是错的,别这么写,考试肯定挂,上班肯定被开除
如果注释掉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
另外,你这个程序肯定是错的,别这么写,考试肯定挂,上班肯定被开除
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询