【问题标题】:Modifying a pointer to an array in a function在函数中修改指向数组的指针
【发布时间】:2016-11-07 09:08:29
【问题描述】:

我在将数组传递给函数然后对其进行修改时遇到问题。例如:

void foo(int ** a) {
  int * b = new int[3]
  //Initialize b, i.e b = {3, 2, 1}
  a = &b;
  //*a = {3, 2, 1}
}

int * c = new int[3]
//Initialize c; c = {1, 2, 3}
foo(&c);
// c is still {1, 2, 3}. Why?

我不太确定为什么c 不指向与b 相同的数组。

【问题讨论】:

  • *a = b; 应该可以。虽然我不确定你想做什么。
  • @Arunmu 是的,谢谢。
  • @MarkoStojanovic 您的问题与this 问题中解释的行为有点相似,因此它也将帮助您理解您的问题:)
  • @ItbanSaeed 是的,我正在寻找它,但我自己没有找到。我想我在谷歌搜索时不知道如何正确形成声明。
  • 没问题,谷歌搜索没有火箭科学。您可能还没有从结果中找到链接。我只是想让您的问题更清楚一点:)

标签: c++ pointers


【解决方案1】:

a 的类型为int**,它是按值传递的,所以修改它不会修改c

要修改它,你必须这样做:

  *a = b;

通过这样做,您将b 的地址分配给*a 指向的变量(对应于c),因此它们将指向同一个数组。

【讨论】:

  • 谢谢。我忘了c的位置是按值传递的,所以我认为*a = ba = &b是等价的。
猜你喜欢
  • 1970-01-01
  • 2015-06-21
  • 1970-01-01
  • 1970-01-01
  • 2011-01-12
  • 2013-11-13
  • 1970-01-01
相关资源
最近更新 更多