seclan のほえほえルーム

| |

・プログラミング言語 C の新機能 Part XX: ARR#0:可変長配列: 多次元配列へのポインタ (1999/09/13 [])
 可変長配列は、もちろんその型の配列を指し示すポインタにアドレスを代入することができます。しかし、従来の C 言語でそうだったとおり、配列の次元は一致している必要があり、さらに最上位次元の最大値を除いた他の最大値は一致している必要があります。例を示します。


int ar1[n][8][m];
int (*par1)[3][n-4];
int (*par2)[n][n+1];

par1 = ar1;  //(1)エラー: 8 != 3
par2 = ar1;  //(2)OK: ただし n == 8, m == n + 1 の時以外は未定義の挙動

 (1) の場合は二番目の配列の要素の最大値が ar1 は 8、par1 は 3 というように一致していません。その結果これはエラーになります。(2) の場合は par2 は n なので、自由な値を入れることができます。最後の要素も ar1 は m、par2 は n+1 なので同様です。しかしこれが実際に有効なのは各次元の最大値が一致している時です。つまり n == 8 でかつ m == n + 1 の場合以外は、未定義の挙動となるのです。


by seclan


| |

 

配信

4.03 msec