#include <iostream>
using namespace std;
int *ptr;
void func1() {
int a = 10;
ptr = &a;
}
int main()
{
func1()
cout << *ptr << endl;
return 0;
}
./a.out正确给出10。
在上面的代码中,“a”是局部变量,其范围将在func1()之内。根据我的理解,当方法被激活时,会分配一个称为激活记录的存储单元块,其中包含当前方法调用的所有局部变量和形式参数。激活记录在方法执行期间使用,然后在执行结束时删除。删除激活记录后,将破坏局部变量和形式参数的存储位置,并且丢失它们所包含的值。但是在这里,在主功能上,打印存储在“a”的内存地址中的值时,正确给出了10。请澄清。
最佳答案
简短的答案:这是未定义的行为。
的确,&a
的值仅在函数func1
中有效,在main
中对其进行访问是未定义的行为,其值保持“有效”,可能是因为它仍在堆栈中,但您不应依赖未定义的行为。
关于c++ - 指向函数中局部变量的全局指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23889660/