为什么C语言函数中可以返回局部变量而不能返回局部变量的指针??详解+深解
答案:4 悬赏:20 手机版
解决时间 2021-02-12 14:01
- 提问者网友:世勋超人
- 2021-02-11 17:04
为什么C语言函数中可以返回局部变量而不能返回局部变量的指针??详解+深解
最佳答案
- 五星知识达人网友:山君与见山
- 2021-02-11 18:40
在C语言中,局部变量的作用域只在函数内部,在函数返回后,局部变量的内存就会被释放。如果函数只是返回局部变量,那么这个局部变量会被复制一份传回被调用处。但是如果函数返回的是局部变量的地址,那么就会报错,因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放,这样指针指向的内容就是不可预料的内容,程序就会出错。准确的来说,函数不能通过返回指向栈内存的指针(返回指向堆内存的指针是可以的)。
全部回答
- 1楼网友:白昼之月
- 2021-02-11 19:22
可以(其实指针也是变量,我想你说的普通变量是int float这些吧) 因为在返回的时候系统会自动给你产生那个变量的副本.而不是局部变量的本身.
- 2楼网友:旧脸谱
- 2021-02-11 19:17
都局部变量了。。。返回后局部变量就被释放了。。。你返回这个指针干什么 。。。。,这个指针 指向的单元已经没有权限进行操作了。。
- 3楼网友:西岸风
- 2021-02-11 18:55
这个从函数调用是堆栈的变化说吧,函数调用的时候,系统会将函数的返回地址、参数压入系统栈中,然后跳转到函数的代码区开始执行你函数里面写的代码,这个时候,子函数才会去向系统申请堆空间存放你在这个函数中定义的变量,这些空间(变量)是有生命周期的,到这个子函数执行完毕,它的生命周期就结束了,申请的堆空间就会被释放,这个时候你指向它的指针当然是无效的;而可以返回局部变量的原因是,你子函数的返回值(子函数局部变量),会被当作父函数的局部变量处理,它在堆中可以存放至父函数执行完毕,所以它是有效的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯