何时在 C 中使用指针对指针?

新手上路,请多包涵

我想知道我们什么时候在 C++ 中使用 Pointer to Pointer 以及为什么我们需要指向一个指针?我知道当我们指向一个指针时,这意味着我们正在将变量的内存地址保存到内存中,但我不知道为什么我们需要它?我还看到了一些在创建 矩阵 时总是使用指针对指针的例子!但是为什么矩阵可能需要指针到指针呢?

原文由 Amir Jalilifard 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 598
2 个回答

当您想要更改作为函数参数传递给函数的变量的值并在该函数之外保留更新的值时,您需要指向该变量的指针(单指针)。

 void modify(int* p)
{
  *p = 10;
}

int main()
{
  int a = 5;
  modify(&a);
  cout << a << endl;
}

现在,当您想更改作为函数参数传递给函数的指针的值时,您需要指向指针的指针。

简而言之,即使在函数调用之外,当您想要保留(或保留更改)内存分配或分配时,请使用 ** 。 (因此,使用双指针 arg 传递此类函数。)

这可能不是一个很好的例子,但会向您展示基本用法:

 void safe_free(int** p)
{
  free(*p);
  *p = 0;
}

int main()
{
  int* p = (int*)malloc(sizeof(int));
  cout << "p:" << p << endl;
  *p = 42;
  safe_free(&p);
  cout << "p:" << p << endl;
}

原文由 CreativeMind 发布,翻译遵循 CC BY-SA 4.0 许可协议

何时在 C++ 中使用指针对指针?

我会说最好不要在 C++ 中使用它。理想情况下,您只 需要 在处理 C API 或一些遗留的东西时使用它,这些东西仍然与 C API 相关或设计时考虑到 C API。

C++ 语言特性和随附的标准库已基本淘汰了指向指针的指针。当您想要传递指针并在函数中编辑原始指针时,您有参考,对于指向字符串数组的指针,您最好使用 std::vector<std::string> 。这同样适用于多维数组、矩阵和诸如此类的东西,C++ 处理这些事情的方法比指向指针的神秘指针更好。

原文由 dtech 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏