示例代码:
#include <stdio.h>
int main (){
int *p;
{
int v = 1;
p = &v;
}
printf("%d\n", *p);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这段代码工作正常,但我不确定是否保证v的地址将被保留.
要添加Merlyn的答案,一个可能导致您不想要的行为的情况如下:
#include <stdio.h>
int main (){
int *p;
{
int v = 1;
p = &v;
}
{
int w = 2;
printf("%d\n", w);
}
printf("%d\n", *p);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译器可以通过在堆栈上具有v和w共享相同的分配来优化它.同样,编译器也可能不会对此进行优化 - 这就是为什么没有定义在封闭块结束后使用指向变量的指针的行为.程序可能输出"2"和"1",或"2"和"2",或"2",这取决于使用的编译器和设置完全不同.