以下是产生两种不同输出的最简单的代码,
CODE
#include<stdio.h>
int main(){
int *j;
{
int i = 10;
j = &i;
}
printf("%d",*j);
}
这是未定义行为的一部分,是另一个question on SO说的吗?
根据引用的问题,
printf
仅生成输出10 因为没有其他程序/系统可以覆盖相同的程序/系统 一段记忆。
答案 0 :(得分:3)
是的,您链接的问题的答案是正确的。结果是未定义的行为。在所有版本的C标准中。
就程序而言,变量i
不再存在于包含它的块的末尾。
因此,j
的值是一个已不复存在的地址。因此,评估*j
会给出未定义的行为。
未定义行为的一个可能症状是输出因编译器而异。还有许多其他可能的症状,因为正式地,当行为未定义时允许发生任何行为。