C++;-多维数组中的指针 我买了一本Visual C++入门书,它涉及到数组、字符串和指针。我理解这个概念,但当涉及到多维数组时,我有点不知所措

C++;-多维数组中的指针 我买了一本Visual C++入门书,它涉及到数组、字符串和指针。我理解这个概念,但当涉及到多维数组时,我有点不知所措,c++,visual-c++,C++,Visual C++,数组和指针声明: double beans[3][4]; double* pbeans; 我理解这一部分: *您可以声明指针pbeans并为其赋值,如下所示: double* pbeans; pbeans = &beans[0][0]; 但是,当作者提出您可以通过键入以下语句来分配第一行/维度的地址时,他失去了我: pbeans = beans[0]; 为什么我们可以跳过这里的“地址”操作符? 对我来说,合乎逻辑的是: pbeans = &beans[0]; 假设您只有一

数组和指针声明:

double beans[3][4];
double* pbeans;
我理解这一部分:

*您可以声明指针pbeans并为其赋值,如下所示:

double* pbeans;
pbeans = &beans[0][0];
但是,当作者提出您可以通过键入以下语句来分配第一行/维度的地址时,他失去了我:

pbeans = beans[0];
为什么我们可以跳过这里的“地址”操作符? 对我来说,合乎逻辑的是:

pbeans = &beans[0];

假设您只有一个数组

double legumes[5];
数组衰减为指针,因此您可以

double* plegumes = legumes;
当您声明一个二维数组时,您所做的是创建一个数组数组。因此表达式
beans[0]
实际上是指一个数组。所以声明

pbeans = beans[0];

只是将数组分配给指针。

因为数组衰减为指向第一个元素的指针。如果我们有一个名为
arr
的数组,那么在数组不适合的地方使用
arr
通常会导致
arr
被视为指针。这叫做衰变

在本例中,
bean[0]
是一个数组;具体来说,一个
双[4]
。但是,由于无法将数组分配给指针,因此数组将衰减为
双精度*

您提供的代码,
double*pbeans=&beans[0]将尝试将指向双精度数组的指针分配给指向双精度数组的指针;由于类型不匹配,这将不起作用


此外,除此之外,这本书听起来不是一本很好的书;将数组、字符串和指针一起设定为C。

数组类型和指向数组第一个元素的指针之间存在标准转换。作为一个简单的例子:

int array[5];
int* p = array;
p
现在是指向
array
的第一个元素的指针,因为如果需要,“array of 5 int”类型的对象将衰减为“pointer to
int

在您的例子中,
beans[0]
属于“4 double数组”类型,并将衰减为指向
beans[0]
数组中第一个元素的“指向double的指针”。这相当于执行
double*p=&beans[0][0]

在处理数组、指针和其他关系时非常有用。请查看