20
 int (*a)[5];

上記の 5 つの整数の配列へのポインターを初期化するにはどうすればよいでしょうか。

以下の表現は正しいですか?

int (*a)[3]={11,2,3,5,6}; 
4

4 に答える 4

20

5たとえば、長さの int の配列があるとします。

int x[5];

それからあなたはすることができますa = &x;

 int x[5] = {1};
 int (*a)[5] = &x;

配列の要素にアクセスするには: (*a)[i](== (*(&x))[i]== (*&x)[i]== )演算子x[i]の優先順位が よりも高いため、括弧が必要です。(よくある間違いの 1 つは、配列の要素にアクセスすることです)。[]**a[i]

あなたが質問したのはコンパイル時エラーであることを理解してください:

int (*a)[3] = {11, 2, 3, 5, 6}; 

{11,2,3,5,6}に割り当てることができ、 に割り当てているため、これは正しくなく、タイプの不一致もint a[5];ありますint (*a)[3]

さらに、

一次元のようなことができます:

int *why = (int p[2]) {1,2};

同様に、2 次元の場合はこれを試してください (thanks @ caf ):

int (*a)[5] = (int p[][5]){ { 1, 2, 3, 4, 5 } , { 6, 7, 8, 9, 10 } };
于 2013-07-25T06:53:40.140 に答える
1
int a1[5] = {1, 2, 3, 4, 5};
int (*a)[5] = &a1;
于 2013-07-25T06:57:14.383 に答える
0
int vals[] = {1, 2};
int (*arr)[sizeof(vals)/sizeof(vals[0])] = &vals;

次に、次のように配列の内容にアクセスします。

(*arr)[0] = ...
于 2013-07-25T06:56:09.860 に答える