2

2 次元配列の最初の行を指す次のコードを書きました。しかし、私がするとき

arrayPtr = & array[0];

私は結局得ます

エラー:代入で変換できませdouble (*)[1]double*

 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

あなたのコードで:

  • 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))array

于 2017-01-04T10:18:32.987 に答える
2
于 2017-01-04T10:11:13.220 に答える
1
double array[2][1];
double* arrayPtr;
arrayPtr = & array[0];

arrayPtrタイプを持っています

POINTER (DOUBLE)

whilearrayは型を持っています

POINTER(POINTER(DOUBLE))

&array[0]タイプを持っています

POINTER(POINTER(DOUBLE))

あなたは割り当てようとします

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

それを行う正しい方法は

arrayPtr = array[0];

また

arrayPtr = *array;
于 2017-01-04T10:21:06.613 に答える