int* funTest() {
int a = 1;
return &a;
}
...
int main(void) {
int *p = funTest();
std::cout << *p << std::endl;
return 0;
}
int *p = funTest();操作是危险的,因为funTest()函数中的a是局部变量,其生命周期为funTest()函数开始到结束,此时指针p指向地址的内容是未知的;
int* funTest() {
static int a = 1;
return &a;
}
...
int main(void) {
int *p = funTest();
std::cout << *p << std::endl;
return 0;
}
使用static将变量a存储到全局区(static静态区),当函数funTest()执行完毕后,变量a不会被释放,此时指针p指向已知空间(&a)。