/*不理解为啥这个正确*/
#include <stdio.h>
int * f();
int main(){
int* result= f();
printf("%d\n",*result);
return 0;
}
int * f(){
int a=3;
int* i=&a;
return i;
}
为什么上面这段代码能正确执行? a (左值)是不是一个内存地址里面存了 3 (右值)?那么上面这段代码 i 和 a 是不是指向了同一块内存,内存里的值是 3 ?然后函数结束是不是这块内存就被释放了 3 就没了?为啥还能通过?
/*这段代码错的可以理解*/
#include <stdio.h>
int * f();
int main(){
int* result= f();
printf("%d\n",*result);
return 0;
}
int * f(){
int a=3;
return &a;
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.