C/C++——子函数为什么不能返回指针

这个从函数调用是堆栈的变化说吧,函数调用的时候,系统会将函数的返回地址、参数压入系统栈中,然后跳转到函数的代码区开始执行你函数里面写的代码,这个时候,子函数才会去向系统申请堆空间存放你在这个函数中定义的变量,这些空间(变量)是有生命周期的,到这个子函数执行完毕,它的生命周期就结束了,申请的堆空间就会被释放,这个时候你指向它的指针当然是无效的;而可以返回局部变量的原因是,你子函数的返回值(子函数局部变量),会被当作父函数的局部变量处理,它在堆中可以存放至父函数执行完毕,所以它是有效的.

子函数的返回值可以当作父函数的局部变量?这是为什么?空间都释放了为什么还会返回?

int test(void); int main() { test(); //返回值被销毁 int i = test(); //返回值赋给了main函数的局部变量 return 0; } 子函数的返回值是属于子函数局部变量,生命周期也只到子函数结束,但一般在调用它的函数里会被直接使用或者定义变量来存储,所以也会被放入父函数的栈中,直到父函数执行完毕。 另:评论的那哥们说得对,静态分配的变量是在栈中的,动态分配的才在堆中,回答的时候疏忽了,但是是一样的道理,最后一句话参考了堆管理机制,在栈中是不对的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值