引用指针问题?

时间:2017-09-12 05:58:04

标签: 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; // 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
}

据我所知,Print#2Print#3应该有相同的结果,但在编译时却不是。它也适用于Print#4Print#5。有人能帮帮我吗? 更新:这是我在计算机上编译时的输出:

00EFF9D4 3 //1
00EFF9D4 1552276352 //2
00EFF9D4 2 //3
00EFF9D4 1552276352 //4  

不应该(1)和(2)相同吗? (3)和(4)。

1 个答案:

答案 0 :(得分:3)

我认为你的意思是int a中的g()

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

然后取消引用指针,该指针调用 Undefined Behavior