我是cpp STL的新手,我对向量数组有疑问
当我们声明vectors <int> arr[100];
之类的向量数组时
我们也可以说这是一个二维矩阵。但是如果我们谈论二维数组(int prr[100][100]
)然后prr[0]
,那么它将在第0行打印第一个数组的地址
基本上我想问为什么我们要声明vector <int> arr[100]
,因为arr[0]
还将在第0个数组中存储数组的地址
我们应该像vector <int*> arr[100]
那样声明向量数组
答案 0 :(得分:2)
但是,如果我们谈论的是二维数组(
int prr[100][100]
),然后是prr[0]
,它将在第0行打印第一个数组的地址
在某种程度上和某些情况下都是如此。
prr[0]
是类型int [100]
的对象-100个int
s的数组。
在某些情况下,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*
进行任何进一步的比较都是没有道理的。