首页 > 解决方案 > 为什么 C++ 从大括号范围返回有效的指针数据?

问题描述

如果我将此范围内的数据指向在这些大括号范围之外声明的指针,为什么 C++ 从函数内部的大括号范围返回有效数据?

示例

int *pInt;
// why *pInt is still "valid" ?
{
    int x = 134;
    pInt = &x;
}
cout << *pInt << endl;
// *pInt returns 134

另一个例子:

// or why *pChar is still "valid" ?
char *pChar;
{
    char cArr[] = { 'Y', 'o', '!', '\0' };
    pChar = cArr;
}
cout << pChar << endl;
// pChar returns 'Yo!'

我不明白这一点,因为在这种情况下:

int * invalid_pointer(){
    int x = 134;
    return &x;
}

int main(void){
    int *pInt = invalid_pointer();
    cout << *pInt << endl;
    return 0;
}

*pInt 将是“2079168904”,这是无效值,在这种情况下这是正确的行为,我希望在大括号情况下会有相同的行为。

请解释为什么这两种情况不同。谢谢!

标签: c++

解决方案


推荐阅读