C++ 指针 - 在函数调用中重新分配

标签 c++ pointers

我最近正在查看 Google 的 C++ materials并遇到了 following code用于演示指针

void Unknown(int *p, int num);
void HardToFollow(int *p, int q, int *num);

void Unknown(int *p, int num) {
 int *q;

 q = #
 *p = *q + 2;
 num = 7;
}

void HardToFollow(int *p, int q, int *num) {
 *p = q + *num;
 *num = q;
 num = p;
 p = &q;
 Unknown(num, *p);
}

main() {
 int *q;
 int trouble[3];

 trouble[0] = 1;
 q = &trouble[1];
 *q = 2;
 trouble[2] = 3;

 HardToFollow(q, trouble[0], &trouble[2]);
 Unknown(&trouble[0], *q);

 cout << *q << " " << trouble[0] << " " << trouble[2];
}

我的问题如下:q 指针最初分配给 trouble[1]。当发送到 HardToFollow 时,q 指针(现在称为 p)被更新为值 4,trouble[1] 随后也被更新。紧接着,原始 q 指针(在此函数中再次称为 p)被重定向为指向局部变量(p = &q)。尽管如此,在程序结束时,我们原来的 q 指针又回到了指向 trouble[1] 的位置。这是怎么发生的?

最佳答案

您不能通过按值传递将 main::q 传递给 HardToFollow 函数来简单修改它。由于您将 q 作为按值传递传递给它,因此在 HardToFollow 中,您可以通过 p< 修改 q 指向的内容p 本身,但您不能修改 q 以指向其他内容。

稍微修改示例即可达到您的预期:

void HardToFollow(int*& p, int q, int *num) {
 *p = q + *num;
 *num = q;
 num = p;
 p = &q;
 //Unknown(num, *p); //forget about this for now
}

关于C++ 指针 - 在函数调用中重新分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11518961/

相关文章:

c++ - 如何计算我的程序运行需要多少毫秒?

c++ - 无法打印数组中的信息,不知道如何遍历存储在类中的数组?

c - 使用 memcpy 复制作为参数传递的数组

C++ 从动态数组返回值(图像类)

c - 这个 reverse() 函数在下面的代码中是如何工作的?

c - 学习如何在使用 scanf 时正确引用结构体字段 (C)

c++ - 带有Visual Studio Code的FLTK库

c++ - 为什么我的浮点值会失去精度并丢掉小数位?下面的示例代码

c++ - 为什么在 GCC 和 clang 之间编译的 c++17 lambda 有差异?

c++ - 使用 RAW 指针对 boost::shared_ptr 变量进行条件初始化