【问题标题】:Referencing multi-dimensional arrays in C++在 C++ 中引用多维数组
【发布时间】:2021-08-18 02:56:37
【问题描述】:
int a[3][2] = {{3, 6}, {8, 4}, {7, 1}}; 
cout << *a[1] << *(*a + 1);

这是我在这里的第一个问题,所以如果我违反任何规则,请原谅。

代码是如何工作的?如果有人解释多维数组中的引用是如何工作的,那就太好了。

代码的输出是86。

【问题讨论】:

  • 你将不得不解释你认为它做了什么,以及你的知识差距在哪里。
  • 注意:*(x + y) 通常写成x[y] 会更好。 *x 在很大程度上也等同于 x[0],因为它实际上是 *(x + 0)
  • 我理解你在单维数组的笔记中所说的。我不明白的是,这意味着什么。

标签: c++ arrays multidimensional-array reference


【解决方案1】:

a[1] 引用数组a 中的第二个元素(在本例中为{8, 4}),它前面的* 访问{8, 4} 的第一个元素(8)。

(*a + 1) 表示加一的第一个值。在这种情况下,它是指向数组{3, 6} 开头的指针加一,这意味着指向{3, 6} 的第二个元素的指针。在我解释过的语句中添加* 表示值,由该指针指向

如果这是为了教你指针是如何工作的,那没关系,但在你的代码中最好使用a[1][2]之类的东西。

我不知道我是否解释清楚了,如果你不明白,请告诉我。

【讨论】:

    【解决方案2】:

    请记住,指针和数组在 C++ 中很容易混合在一起,因为这是它从 C 继承的东西。因此 a[n]*(a + n) 实际上是相同的,只是表达同一事物的两种不同方式,尽管可以说是 a[n]符号要简单得多,应该使用清楚。

    2D 版本是 a[n][m],扩展为 *(a + n)[m] 或进一步扩展为 *(*(a + n) + m)

    如果m0,那么你会得到*(*(a + n))

    所以对于n=1 m=0 然后是*(*(a + 1))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-11
      • 2016-07-16
      • 1970-01-01
      • 2015-07-08
      • 2014-01-13
      • 2015-01-27
      • 2017-05-10
      • 1970-01-01
      相关资源
      最近更新 更多