c++ - 在 cpp 中声明向量数组
问题描述
我是 cpp STL 的新手,当我们声明向量数组时,我对向量数组有疑问,就像vectors <int> arr[100];
我们也可以说这是二维矩阵一样。但是如果我们谈论二维数组 ( int prr[100][100]
),prr[0]
那么它将打印第 0 行中第一个数组的地址基本上我想问为什么我们要声明vector <int> arr[100]
,因为arr[0]
还会将数组的地址存储在第 0 个数组中,我们应该像vector <int*> arr[100]
声明向量数组一样声明
解决方案
但是如果我们谈论二维数组 (
int prr[100][100]
) 那么prr[0]
它将打印第 0 行中第一个数组的地址
这在某种程度上和某些情况下是正确的。
prr[0]
是一个类型的对象——一个 100秒int [100]
的数组。int
在某些情况下,prr[0]
衰减为指向其第一个元素的指针,但并不总是如此。
sizeof(prr[0])
将100 * sizeof(int)
。
&prr[0]
将是类型int (*)[100)
,指向“100 int
s 数组”的指针,而不是int**
.
相比之下,
基本上我想问我们为什么要声明
vector <int> arr[100]
,因为arr[0]
还会将数组的地址存储在第 0 个数组中,我们应该像vector <int*> arr[100]
声明向量数组一样声明
不,arr[0]
不会将数组的地址存储在第 0 个数组中。arr[0]
是类型std::vector<int>
。就这么简单。与数组不同,类型std::vector<int>
的对象在任何上下文中都不会衰减为指向对象第一个元素的指针。因此,任何进一步的比较都是int*
没有意义的。