使用指针引用

时间:2016-05-17 12:01:02

标签: c pointers scope

以下是产生两种不同输出的最简单的代码,

  1. 10(Turbo C版本3.0)
  2. 0(在线编译器ideone
  3. CODE

    #include<stdio.h>
    int main(){
       int *j;
       {
           int i = 10;
           j = &i;
       }
       printf("%d",*j);
    }
    

    这是未定义行为的一部分,是另一个question on SO说的吗?

      

    根据引用的问题,printf仅生成输出10   因为没有其他程序/系统可以覆盖相同的程序/系统   一段记忆。

1 个答案:

答案 0 :(得分:3)

是的,您链接的问题的答案是正确的。结果是未定义的行为。在所有版本的C标准中。

就程序而言,变量i不再存在于包含它的块的末尾。

因此,j的值是一个已不复存在的地址。因此,评估*j会给出未定义的行为。

未定义行为的一个可能症状是输出因编译器而异。还有许多其他可能的症状,因为正式地,当行为未定义时允许发生任何行为。