通过指针访问内部作用域中声明的变量是否安全?

时间:2015-02-26 07:11:52

标签: c pointers scope

以下程序打印

root 3                                                                                                                                                        
next 11

但是,我不确定程序是否保留root.next直到程序结束。

#include<stdio.h>

typedef struct sequence
{
    int x;
    sequence* next;
}sequence;

int main()
{

   sequence root;
   root.x = 3;
   {
       sequence p;
       p.x = 11;
       root.next = &p;
   }

   printf("root %d\n",root.x);
   printf("next %d\n",root.next->x);
   return 0;
}

1 个答案:

答案 0 :(得分:3)

p的范围在结束时结束。

{
    sequence p;
    p.x = 11;
    root.next = &p;
} <---- here

当您致电printf("next %d\n",root.next->x);时,您指向p的变量root.next已不再存在。因此它不安全&#34;,因为它会导致不确定的行为。