int (*a)[5];
上記の 5 つの整数の配列へのポインターを初期化するにはどうすればよいでしょうか。
以下の表現は正しいですか?
int (*a)[3]={11,2,3,5,6};
int (*a)[5];
上記の 5 つの整数の配列へのポインターを初期化するにはどうすればよいでしょうか。
以下の表現は正しいですか?
int (*a)[3]={11,2,3,5,6};
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 } };
int a1[5] = {1, 2, 3, 4, 5};
int (*a)[5] = &a1;
int vals[] = {1, 2};
int (*arr)[sizeof(vals)/sizeof(vals[0])] = &vals;
次に、次のように配列の内容にアクセスします。
(*arr)[0] = ...