访问函数范围之外的函数变量

时间:2016-04-13 20:18:11

标签: c++ pointers scope

我现在正在学习cpp一个月,而且我一直认为在函数范围之外无法访问函数内部的变量,这些变量在栈中初始化。但是,当我使用指向函数成员的全局指针时,似乎不是这种情况,如下例所示:

#include <iostream>

void fun(void); int *pInt;

int main(int argc, char **argv) {

  pInt = 0;   
  fun();   
  std::cout << "*pInt = " << *pInt << std::endl;
  return 0; 
}

void fun(void) {   
  int a = 3;   
  pInt = &a; 
}

编译并运行它不会产生任何错误,并且确实会打印出预期的结果。 为什么会这样?在函数fun超出范围之后,是不是“a”假设超出范围(因此它的值)?

1 个答案:

答案 0 :(得分:0)

不,你看到的是undefined behavior

fab函数完成执行后,fun()不再存在。因此,在a中,任何试图取消引用指针(先前)指向main()的内存位置的尝试都会调用UB。