2012-07-25 49 views
0

可能重复:
Can a local variable's memory be accessed outside its scope?
Scope vs life of variable in C内存分配的局部变量用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()获取存储?或者所有函数的局部变量都获得商店的位置?
  2. 如何从另一功能访问此功能?
+1

这已经被很多人问过了,请在发布之前搜索网站。您也可以使用编辑窗格顶部的按钮来组织您的问题,因为您可以在chris编辑后立即找到它。询问前请至少投入一点工作。 – 2012-07-25 06:30:01

回答

2

访问*pfoo1()时,您正在调用未定义的行为。 如果你加入这样的功能:呼叫foo()foo1()之间

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

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