C++ 引用指针问题?

C++ 引用指针问题?,c++,function,pointers,C++,Function,Pointers,这就是我所拥有的: void g(int *&x) { int a = 3; x = &a; } void h(const int *&x) { int b = 2; x = &b; } int main() { int *p = new int; *p = 5; g(p); cout << p << " " << *p << endl; // Prin

这就是我所拥有的:

void g(int *&x) {
    int a = 3;
    x = &a;
}
void h(const int *&x) {
    int b = 2;
    x = &b;
}
int main() {
    int *p = new int;
    *p = 5;
    g(p);
    cout << p << " " << *p << endl; // Print #2
    cout << p << " " << *p << endl; // Print #3
    const int*p1 = p;
    h(p1);
    cout << p << " " << *p << endl; // Print #4
    cout << p << " " << *p << endl; // Print #5
}

(1)和(2)不应该相同吗?(3) 和(4)任何一种

我想你的意思是
inta
in
g()

函数使指针指向一个局部变量,该变量在函数终止后将超出范围


然后取消对指针的引用,该指针调用未定义的行为。

在函数
g
中,什么是
a
?请创建一个链接以显示给我们。还向我们显示预期和实际输出。对于函数
h
,您将指针指向一个局部变量,该变量超出范围,一旦函数返回,就不再存在。取消对该指针的引用将导致整个程序格式错误和无效。可能是一个输入错误,意思是
int a
。为什么在第二个cout调用未定义的行为,而在第一个cout调用未定义的行为。@dannguyen…未定义的行为…你永远不知道会发生什么!;)
00EFF9D4 3 //1
00EFF9D4 1552276352 //2
00EFF9D4 2 //3
00EFF9D4 1552276352 //4