我遇到过一些断言,设置指向不是标量地址或超过标量地址的指针的行为是不确定的(对数组有类似的限制)。
所以考虑一下:
int main()
{
int* bar;
{
int foo = 1;
int* b = &foo;
bar = b;
}
int* copy = bar;
}
是否定义了int* copy = bar;
的行为? bar
不再指向标量,因为它超出了范围。
答案 0 :(得分:3)
bar
的值在关闭括号后是不确定的。
引用ISO / IEC 9899:2011,第6.2.4节§2:
[...]当指针指向(或刚刚过去)的对象到达其生命周期的末尾时,指针的值变得不确定。
int* copy = bar;
的确切行为含糊不清 - 请参阅N1793 — Stability of indeterminate values in C11提供的eugene-sh。