为了账号安全,请及时绑定邮箱和手机立即绑定

返回在被调用函数中声明的指针会发生什么?

返回在被调用函数中声明的指针会发生什么?

收到一只叮咚 2019-04-07 11:19:22
例如程序:c#includeint*return_sth(){inttmp=5;int*ptr=&tmp;returnptr;}intmain(void){printf("%p,%d\n",return_sth(),*return_sth());inttmp=10;int*ptr2=&tmp;printf("%p,%d\n",ptr2,tmp);return0;}运行结果:$./a.out0x7ffc5e2c6274,50x7ffc5e2c6294,10很明显,在return_sth()返回之后,*ptr是未定义的,那么ptr呢?仍然存在还是一样是未定义的?
查看完整描述

2 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

printf("%p,%d\n",return_sth(),*return_sth());
中,return_sth()返回ptr的值,也就是一个地址,虽然与int不匹配,但编译器只会发出警告,但实际上还是一个地址,所以*return_sth()就是对这个地址解引用,当然也就是5了,不过你这程序看起来实在没什么意思
                            
查看完整回答
反对 回复 2019-04-07
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

ptr的值就是tmp的地址,int*ptr=&tmp;以后ptr值就确定了,就像intretval=100;returnretval;一样,不存在未定义的问题。
                            
查看完整回答
反对 回复 2019-04-07
  • 2 回答
  • 0 关注
  • 385 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信