例如程序:
#include <stdio.h>
int *return_sth()
{
int tmp = 5;
int *ptr = &tmp;
return ptr;
}
int main(void)
{
printf("%p, %d\n", return_sth(), *return_sth());
int tmp = 10;
int *ptr2 = &tmp;
printf("%p, %d\n", ptr2, tmp);
return 0;
}
运行结果:
$ ./a.out
0x7ffc5e2c6274, 5
0x7ffc5e2c6294, 10
很明显, 在return_sth()返回之后, *ptr是未定义的, 那么ptr呢?
仍然存在还是一样是未定义的?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在
printf("%p, %dn", return_sth(), *return_sth());
中,return_sth()返回ptr的值,也就是一个地址,虽然与int不匹配,但编译器只会发出警告,但实际上还是一个地址,所以*return_sth()就是对这个地址解引用,当然也就是5了,不过你这程序看起来实在没什么意思