引用指针

时间:2012-12-10 19:35:27

标签: variables pointers global

为什么此代码中的第一个cout<<*ptr打印 100 和下一个cout<<*ptr打印 0 中的主要方法是什么? 请清楚地描述在内存和程序中发生的事情。

// Define a global pointer
int *ptr;

int method()
{
    // Define a variable local in this method 
    int local = 100;

    // Set address of local variable (name of variable is local) 
    // in the ptr pointer
    ptr = &local;

    return -1;
}

int main()
{
    // Call method
    method();   

    // Print value of ptr pointer
    cout<<*ptr<<"\n";
    cout<<*ptr<<"\n\n"; 

    return -1;
}

1 个答案:

答案 0 :(得分:0)

正在发生的事情是,在method中,它会分配一个名为int的{​​{1}},其值为local。它将全局100指针int设置为指向局部变量ptr。然后local超出范围,并且内存位置method及其值变坏,因为取消分配了int local

local的第一次使用很幸运,并在该位置找到有意义的值。 ptr的第二种用法不是。由于ptr的{​​{1}}变量不再存在,所以第一次获得任何有意义的值纯粹是运气。您不应该使用指向已解除分配的内容的指针。