2

我编写了以下代码来指向二维数组的第一行。但是,当我这样做时

arrayPtr = & array[0];

我最终得到

错误:无法转换double (*)[1]double*in assignment

 arrayPtr = & array[0];

我的程序是:

#include <iostream>
    
int main(int argc, char **argv) 
{       
    double array[2][1];

    array[0][1] = 1.0;
    array[1][1] = 2.0;
    
    double* arrayPtr;
    arrayPtr = &array[0];
    
    return 0;
}

有人可以帮助我了解我哪里出错了吗?

4

3 回答 3

2
于 2017-01-04T10:11:13.220 回答
2

在您的代码中:

  • array是类型double (*)[1]
  • array[0]是类型double[1]
  • &array[0](这等于array)是类型double (*)[1](即指向的指针double[1]

注 1: T[]可以衰减到T*。所以在你的例子double[]中可以衰减到double *.

注 2: a[b] == *(a + b),所以在你的例子中&array[0]等于& (*(array + 0))which 被简化为array本身。

于 2017-01-04T10:18:32.987 回答
1
double array[2][1];
double* arrayPtr;
arrayPtr = & array[0];

arrayPtr有类型

POINTER (DOUBLE)

虽然array有类型

POINTER(POINTER(DOUBLE))

&array[0]有类型

POINTER(POINTER(DOUBLE))

你尝试分配

POINTER (DOUBLE) <= POINTER(POINTER(DOUBLE))

正确的做法是

arrayPtr = array[0];

或者

arrayPtr = *array;
于 2017-01-04T10:21:06.613 回答