#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/

10-11 00:45