猿问

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

例如程序:
c#include
int*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.out
0x7ffc5e2c6274,5
0x7ffc5e2c6294,10
很明显,在return_sth()返回之后,*ptr是未定义的,那么ptr呢?
仍然存在还是一样是未定义的?
收到一只叮咚
浏览 386回答 2
2回答

扬帆大鱼

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

缥缈止盈

ptr的值就是tmp的地址,int*ptr=&tmp;以后ptr值就确定了,就像intretval=100;returnretval;一样,不存在未定义的问题。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答