int* test2() {
int a = 900;
return &a;
}
int main(int argc, char* argv[])
{
int* b = test2();
printf("%d", *b); //900
return 0;
}
但是函数末尾的局部变量会发生什么?在我的理解中,test2函数完成后,变量a应该被“遗忘”了,也就是这个地址的值应该被清理掉。而不是这里是地址,而是一个值。使用它是否正确?
int* test2() {
int a = 900;
return &a;
}
int main(int argc, char* argv[])
{
int* b = test2();
printf("%d", *b); //900
return 0;
}
但是函数末尾的局部变量会发生什么?在我的理解中,test2函数完成后,变量a应该被“遗忘”了,也就是这个地址的值应该被清理掉。而不是这里是地址,而是一个值。使用它是否正确?
什么都没有被清除(为什么?!),只是你很幸运,在这个地方什么都没有被覆盖- 未定义的行为,它是如此未定义:)
你看,你可以在红灯时跑过马路。你可以蒙着眼睛穿过它并塞住耳朵。而且你会很擅长......暂时。就像在这种情况下:)