0

可能重复:
可以在其范围之外访问局部变量的内存吗?
C中变量的范围与生命周期

int *p;

void foo()
{
    int i = 5;
    p = &i;
}

void foo1()
{
    printf("%d\n", *p);
}

int main()
{
   foo();
   foo1();
   return 0;
}

输出:5(foo1() 打印 i 的值)

注意:我在 Linux 上运行这个程序

据我所知,局部自动变量的范围仅限于块/函数的生命周期。

  1. foo() 中的这个变量 i 存储在哪个内存段中?或者函数的所有局部变量在哪里存储?
  2. 如何从另一个功能访问它?
4

1 回答 1

2

*p访问in时,您正在调用未定义的行为foo1()。如果您添加了这样的功能:

void do_very_little(void)
{
    char buffer[] = "abcdef";
    puts(buffer);
}

foo()并在调用and之间调用它foo1(),您可能会得到不同的输出。这不能保证;关于未定义行为的一个有趣的事情是任何事情都可能发生,你没有理由抱怨。

于 2012-07-25T06:29:59.513 回答