多维数组
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]
实际上是p1
,q[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 相同。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '