C++ 指向阵列
有这样的代码:C++ 指向阵列,c++,C++,有这样的代码: int tab[14][2]; int (*wskk)[2] = tab; // &tab makes error int tab2[2]; wskk = &tab2; // tab2 makes error 为什么可以使用一个指针指向两个不同维度的数组?要明确数组到指针的转换,可能会更清楚: int tab[14][2]; int (*wskk)[2] = &tab[0]; // point at tab[0], which has type arr
int tab[14][2];
int (*wskk)[2] = tab; // &tab makes error
int tab2[2];
wskk = &tab2; // tab2 makes error
为什么可以使用一个指针指向两个不同维度的数组?要明确数组到指针的转换,可能会更清楚:
int tab[14][2];
int (*wskk)[2] = &tab[0]; // point at tab[0], which has type array of 2 int
int tab2[2];
wskk = &tab2; // point at tab2, which has type array of 2 int
另请参见:使数组到指针的转换显式化,它可能会变得更清晰:
int tab[14][2];
int (*wskk)[2] = &tab[0]; // point at tab[0], which has type array of 2 int
int tab2[2];
wskk = &tab2; // point at tab2, which has type array of 2 int
另请参见:要了解发生了什么,您必须熟悉以下几个关键概念:
- 多维数组是数组的数组李>
- 数组的名称衰减为指向其第一个元素的指针李>
的类型是“指向2wskk
s数组的指针”int
tab
,您将获得指向tab
的第一个元素的指针,这是它的第一行;行的类型为int[2]
,因此指向它的指针的类型为int(*)[2]
,这正是指针的类型。因此,您可以将tab
分配给wskk
,它现在将指向tab
的第一行
您不能将&tab
分配给它,因为这会产生一个指向整个多维数组的指针,该数组的类型为int(*)[14][2]
至于第二部分,它更简单:tab2
是两个int
s的数组,因此它的类型是int[2]
。如果通过&
运算符获得指向它的指针,则会得到一个int(*)[2]
,这是指针的类型。实际上,这是有道理的:tab2
和一行tab
实际上是相同的东西(2int
s的数组)
您不能将
tab2
分配给它,因为tab2
会衰减到指向其第一个元素的指针,即int*
要了解发生了什么,您必须熟悉几个关键概念:
- 多维数组是数组的数组李>
- 数组的名称衰减为指向其第一个元素的指针李>
的类型是“指向2wskk
s数组的指针”int
tab
,您将获得指向tab
的第一个元素的指针,这是它的第一行;行的类型为int[2]
,因此指向它的指针的类型为int(*)[2]
,这正是指针的类型。因此,您可以将tab
分配给wskk
,它现在将指向tab
的第一行
您不能将&tab
分配给它,因为这会产生一个指向整个多维数组的指针,该数组的类型为int(*)[14][2]
至于第二部分,它更简单:tab2
是两个int
s的数组,因此它的类型是int[2]
。如果通过&
运算符获得指向它的指针,则会得到一个int(*)[2]
,这是指针的类型。实际上,这是有道理的:tab2
和一行tab
实际上是相同的东西(2int
s的数组)
您不能将
tab2
分配给它,因为tab2
衰减为指向其第一个元素的指针,即int*
不同类型的数组是什么意思?tab是int[14][2],而tab2是int[2]我认为他指的是不同维度在C/C++中,指针实际上并不指向数组;它指向数组中的一个元素。在本例中,第一个元素。@Nemo:那么指向数组的指针呢?不同类型的数组是什么意思?tab是int[14][2],tab2是int[2]我想他指的是不同的维度在C/C++中,指针实际上并不指向数组;它指向数组中的一个元素。在本例中,第一个元素是@Nemo:那么指向数组的指针呢?