【问题标题】:Get a copy of the pointer to an array in c++在 C++ 中获取指向数组的指针的副本
【发布时间】:2015-10-21 01:25:16
【问题描述】:

您好,我正在学习 C++ Primer,有一个简单的问题。请帮帮我。

所以我知道“int *p = (*q)[10]”,其中 p 是指向 10 数组的指针。问题是,在函数定义中:“void print(int (*q)[ 10])" 其中这个指针是一个参数。我怎么能得到那个指针的副本。那会是“int *p = q”吗?

从技术上讲,我不知道如何在 C++ 中测试我的正确性。

谢谢

【问题讨论】:

  • 为什么不使用int *p = new int[10] 来初始化具有 10 个 int 值的数组?
  • @DanilProkhenko 因为新的不好。
  • @DanilProkhorenko 如果在编译时知道大小,则不需要动态分配,如果是,则应首选std::vector,除非有特殊要求。
  • int *p = (*q)[10] 这会取消引用指针 q,在内存中前进 10 个位置,期望可以变成 int * 并将其存储在 p 中。
  • 以“So I know”开头的句子没有意义。

标签: c++ c arrays pointers multidimensional-array


【解决方案1】:
int (*q)[10] 

q 声明为指向10 个ints 数组的指针。只有数组衰减为指向其底层类型的指针,但指向数组的指针不会衰减指向底层类型的指针,因此尝试int* p = q; 将导致编译错误。你需要的是

int (*p)[10] = q; // copies the pointer q to p

【讨论】:

  • oic,是的,这是有道理的。谢谢!所以我猜想访问这个数组中的元素,我可以使用 (*p)[i] 对吗?
  • @user3577115 是的,没错。 *p 的类型是数组int[10],所以(*p)[i](或*(*p+i))是它的第i个元素。
  • 我已经尝试过“(*p+i)”,当然它有效。但据我了解,“”的优先级高于“+”,所以“*p + i”实际上是一个数组加一个int?有这样的重载功能吗?
  • *p 是一个数组,当用作*p 时,它会衰减为指向其基础类型的指针。所以*p + i 将指针int* 增加i 元素。和你使用int arr[10]; *(arr+i) = 42;的时候一样,这里*p扮演arr的角色。只有指向数组的指针不会衰减为指向底层类型的指针,但数组本身会衰减为指针。
  • 好的,我明白了。非常感谢。
猜你喜欢
  • 2019-06-25
  • 1970-01-01
  • 1970-01-01
  • 2014-12-29
  • 1970-01-01
  • 1970-01-01
  • 2017-08-25
  • 1970-01-01
相关资源
最近更新 更多