永发信息网

为什么C语言函数中可以返回局部变量而不能返回局部变量的指针??详解+深解

答案:4  悬赏:20  手机版
解决时间 2021-02-12 14:01
为什么C语言函数中可以返回局部变量而不能返回局部变量的指针??详解+深解
最佳答案
在C语言中,局部变量的作用域只在函数内部,在函数返回后,局部变量的内存就会被释放。如果函数只是返回局部变量,那么这个局部变量会被复制一份传回被调用处。但是如果函数返回的是局部变量的地址,那么就会报错,因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放,这样指针指向的内容就是不可预料的内容,程序就会出错。准确的来说,函数不能通过返回指向栈内存的指针(返回指向堆内存的指针是可以的)。
全部回答
可以(其实指针也是变量,我想你说的普通变量是int float这些吧) 因为在返回的时候系统会自动给你产生那个变量的副本.而不是局部变量的本身.
都局部变量了。。。返回后局部变量就被释放了。。。你返回这个指针干什么 。。。。,这个指针 指向的单元已经没有权限进行操作了。。
这个从函数调用是堆栈的变化说吧,函数调用的时候,系统会将函数的返回地址、参数压入系统栈中,然后跳转到函数的代码区开始执行你函数里面写的代码,这个时候,子函数才会去向系统申请堆空间存放你在这个函数中定义的变量,这些空间(变量)是有生命周期的,到这个子函数执行完毕,它的生命周期就结束了,申请的堆空间就会被释放,这个时候你指向它的指针当然是无效的;而可以返回局部变量的原因是,你子函数的返回值(子函数局部变量),会被当作父函数的局部变量处理,它在堆中可以存放至父函数执行完毕,所以它是有效的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
刚接到西南科技大学的通知,说可以调剂,让选
五粮液1918价格多少
艾丽轩美颜养生会所这个地址在什么地方,我要
一个数的平方+8倍的这个数=20
现存世界上规模最宏大的佛教石窟寺是哪座?
我买金熊中国香米袋子漏气该怎么办
中国农业银行武陟县大封分理处怎么去啊,有知
如图,锐角三角形ABC的两条高CD,BE相交于点O,
http://58.58.65.140:8080/这种网站用手机
国际音标,美式音标,英式音标哪个最好
我明年网教专科毕业 想考本科 怎么考合适
珀莱雅海洋水动力价格表
兰州拉面风味骨头馆怎么去啊,有知道地址的么
深圳湾过关去香港牛头角地铁站怎么走最近
扁坡厂这个地址在什么地方,我要处理点事
推荐资讯
云亭阁珠宝地址在哪,我要去那里办事
什么叫损益类账户
优诗美地地址在什么地方,想过去办事
辽阳有易买吧代购点区域代理吗?
y=sec^2x+csc^2x求导是应该计算y'=sec^2xtan^
电脑稍微剧烈一点的震动就重启怎么回事
数学数字3.6e-6是什么意思?
【天才梦】张爱玲的天才梦的主题思想是什么
二手原装进口雅马哈编号是什么含义呢?
金星秀重播是什么时候,什么台,
甘肃十一选五2o16o147期开奖号
百达翡丽双p印记和日内瓦印记是什么意思
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?