calm27 Asked:2020-03-02 17:59:26 +0800 CST2020-03-02 17:59:26 +0800 CST 2020-03-02 17:59:26 +0800 CST 指针未更改包含链接 772 输出到控制台后,我得到了结果4。 怎么会这样? void f(int* p) { int a = 47; p = &a; } int main() { int* p = new int(4); f(p); std::cout << *p << std::endl; } c++ 2 个回答 Voted Best Answer Mikhailo 2020-03-02T18:05:59+08:002020-03-02T18:05:59+08:00 传递给函数的指针“脱离”了main. 你在里面做了什么 p = &a; 这是对局部变量 p的更改。这与函数变量中存储的内容无关- 它最初包含相同的值。pmain 更糟糕的是,你在其中写入了一个局部变量的地址,所以它(指针)没有超出函数是非常好的a,否则你会得到 UB - 一个指向被破坏变量的指针(这是在使用对指针的引用的注释)。 AR Hovsepyan 2020-03-02T18:11:41+08:002020-03-02T18:11:41+08:00 将函数代码放在函数调用点,得到如下代码: int* p = new int(4); int* _p = p; int a = 47; _p = &a; //теперь _p указывает на а std::cout << *p << std::endl; //p по прежнему указывает на new int(4)
传递给函数的指针“脱离”了
main
.你在里面做了什么
这是对局部变量
p
的更改。这与函数变量中存储的内容无关- 它最初包含相同的值。p
main
更糟糕的是,你在其中写入了一个局部变量的地址,所以它(指针)没有超出函数是非常好的
a
,否则你会得到 UB - 一个指向被破坏变量的指针(这是在使用对指针的引用的注释)。将函数代码放在函数调用点,得到如下代码: