为什么C语言函数中可以返回局部变量而不能返回局部
答案:4 悬赏:10 手机版
解决时间 2021-03-13 22:29
- 提问者网友:精神病院里
- 2021-03-13 17:30
为什么C语言函数中可以返回局部变量而不能返回局部
最佳答案
- 五星知识达人网友:雾月
- 2021-03-13 17:50
这个从函数调用是堆栈的变化说吧,函数调用的时候,系统会将函数的返回地址、参数压入系统栈中,然后跳转到函数的代码区开始执行你函数里面写的代码。
这个时候,子函数才会去向系统申请堆空间存放你在这个函数中定义的变量,这些空间(变量)是有生命周期的,到这个子函数执行完毕,它的生命周期就结束了,申请的堆空间就会被释放,这个时候你指向它的指针当然是无效的;
而可以返回局部变量的原因是,你子函数的返回值(子函数局部变量),会被当作父函数的局部变量处理,它在堆中可以存放至父函数执行完毕,所以它是有效的.
这个时候,子函数才会去向系统申请堆空间存放你在这个函数中定义的变量,这些空间(变量)是有生命周期的,到这个子函数执行完毕,它的生命周期就结束了,申请的堆空间就会被释放,这个时候你指向它的指针当然是无效的;
而可以返回局部变量的原因是,你子函数的返回值(子函数局部变量),会被当作父函数的局部变量处理,它在堆中可以存放至父函数执行完毕,所以它是有效的.
全部回答
- 1楼网友:轻雾山林
- 2021-03-13 20:31
是可以返回全局变量而不能返回局部变量。因为全局变量的声明定义非本函数所有,本函数在返回的时候回释放函数自身声明定义的局部变量,而不能释放外部的全局变量。
- 2楼网友:底特律间谍
- 2021-03-13 20:01
你是想问: 为什么C语言函数中可以返回局部变量而不能返回局部指针?
- 3楼网友:蕴藏春秋
- 2021-03-13 19:21
这个从函数调用是堆栈的变化说吧,函数调用的时候,系统会将函数的返回地址、参数压入系统栈中,然后跳转到函数的代码区开始执行你函数里面写的代码,这个时候,子函数才会去向系统申请堆空间存放你在这个函数中定义的变量,这些空间(变量)是有生命周期的,到这个子函数执行完毕,它的生命周期就结束了,申请的堆空间就会被释放,这个时候你指向它的指针当然是无效的;而可以返回局部变量的原因是,你子函数的返回值(子函数局部变量),会被当作父函数的局部变量处理,它在堆中可以存放至父函数执行完毕,所以它是有效的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯