多维数组

Multidimensional array

本文关键字:数组      更新时间:2023-10-16

问题是找到下面的程序的输出。这在我的测试中出现,我错了。我的回答是4、7、10。答案是 4,8,12,但我需要解释它是如何工作的

#include<iostream>
using namespace std;
int main ()
{
    int number = 4;
    int array[] = {7,8,9,10,11,12,13};
    int *p1 = &number ;
    int *p2 = array;
    int *p3 = &array[3];
    int *q[] = {p1,p2,p3};
    cout << q[0][0] << endl ;
    cout << q[1][1] << endl ;
    cout << q[2][2] << endl ;
    return 0;
}

你拥有的不是一个多维数组(C++实际上没有它(。您拥有的是一系列指针。指针可以像数组一样被索引。

在"图形"形式中,数组q如下所示:

+------+------+------+|Q[0] |Q[1] |Q[2] |+------+------+------+    |    |      |    V |      v+------+  |+-----+----------+----------+-----+|编号| | |... |阵列[3] |阵列[4] |... |+------+  |+-----+----------+----------+-----+          v          +----------+----------+-----+          |阵列[0] |阵列[1] |... |          +----------+----------+-----+

一些注意事项:

大多数人所说的多维数组实际上是数组的数组。就像你可以有一个整数数组,或者就像在代码中q一个指向整数的指针数组一样,也可以有一个整数数组数组。对于更多的"维度",它只是数组的另一个嵌套。

至于为什么指针和数组都可以以相同的方式进行索引,这是因为对于任何数组指针a和(有效(索引i,表达式a[i]等于*(a + i)。这种相等性也是您可以使用数组作为指向其第一个元素的指针的原因。要获取指向数组第一个元素的指针,可以编写&a[0] .它等于 &*(a + 0) ,其中地址和取消引用运算符相互抵消,导致(a + 0)(a)相同,与a相同。所以&a[0]a是平等的。

q[0]实际上是p1q[1]实际上是p2的,q[2]是p3的。

现在 p1 是 number 的地址,所以 p1[0] 只是您正确计算为 4 的数字值。

p2指向数组,因此 p2[1] 与数组 [1] 相同,后者是数组 ot 8 中的第二个元素。

p3指向从位置 3 开始的array子数组。所以p3[2]array[3 + 2] = array[5] = 12 相同。