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 toint
”
在您的例子中,beans[0]
属于“4 double数组”类型,并将衰减为指向beans[0]
数组中第一个元素的“指向double的指针”。这相当于执行double*p=&beans[0][0]
,在处理数组、指针和其他关系时非常有用。请查看