Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 指向阵列_C++ - Fatal编程技术网

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

另请参见:

要了解发生了什么,您必须熟悉以下几个关键概念:

  • 多维数组是数组的数组
  • 数组的名称衰减为指向其第一个元素的指针
  • wskk
    的类型是“指向2
    int
    s数组的指针”
因此,如果您编写
tab
,您将获得指向
tab
的第一个元素的指针,这是它的第一行;行的类型为
int[2]
,因此指向它的指针的类型为
int(*)[2]
,这正是指针的类型。因此,您可以将
tab
分配给
wskk
,它现在将指向
tab
的第一行

您不能将
&tab
分配给它,因为这会产生一个指向整个多维数组的指针,该数组的类型为
int(*)[14][2]

至于第二部分,它更简单:
tab2
是两个
int
s的数组,因此它的类型是
int[2]
。如果通过
&
运算符获得指向它的指针,则会得到一个
int(*)[2]
,这是指针的类型。实际上,这是有道理的:
tab2
和一行
tab
实际上是相同的东西(2
int
s的数组)


您不能将
tab2
分配给它,因为
tab2
会衰减到指向其第一个元素的指针,即
int*
要了解发生了什么,您必须熟悉几个关键概念:

  • 多维数组是数组的数组
  • 数组的名称衰减为指向其第一个元素的指针
  • wskk
    的类型是“指向2
    int
    s数组的指针”
因此,如果您编写
tab
,您将获得指向
tab
的第一个元素的指针,这是它的第一行;行的类型为
int[2]
,因此指向它的指针的类型为
int(*)[2]
,这正是指针的类型。因此,您可以将
tab
分配给
wskk
,它现在将指向
tab
的第一行

您不能将
&tab
分配给它,因为这会产生一个指向整个多维数组的指针,该数组的类型为
int(*)[14][2]

至于第二部分,它更简单:
tab2
是两个
int
s的数组,因此它的类型是
int[2]
。如果通过
&
运算符获得指向它的指针,则会得到一个
int(*)[2]
,这是指针的类型。实际上,这是有道理的:
tab2
和一行
tab
实际上是相同的东西(2
int
s的数组)


您不能将
tab2
分配给它,因为
tab2
衰减为指向其第一个元素的指针,即
int*

不同类型的数组是什么意思?tab是int[14][2],而tab2是int[2]我认为他指的是不同维度在C/C++中,指针实际上并不指向数组;它指向数组中的一个元素。在本例中,第一个元素。@Nemo:那么指向数组的指针呢?不同类型的数组是什么意思?tab是int[14][2],tab2是int[2]我想他指的是不同的维度在C/C++中,指针实际上并不指向数组;它指向数组中的一个元素。在本例中,第一个元素是@Nemo:那么指向数组的指针呢?