2

2d array次のように、寸法に言及せずに を作成しようとしていました。

int m1[][] = {{1,2}, {3,4}};

コンパイル時に次のエラーが発生しました。

error: array type has incomplete element type

およびに言及せずに2d array( でのstack動的メモリ割り当てとは対照的に) でを作成することはできませんか?heaprowcolumn

コンパイラが整数の 2 次元配列の次元を決定できない場合、文字列の 2 次元配列のスペース要件を決定する方法を教えてください。例えば、

char *keywords[] = {"auto", "static", "extern", "volatile"};
4

2 に答える 2

2

正しい、b/c コンパイラーは、a) 割り当てるスペースの量を決定する方法がなく、b) 特定の要素が配列内のどこにあるかを決定する方法がありません。

于 2012-04-19T19:31:41.810 に答える
2

外側の次元は省略できますが、内側は省略できません。だからこれでいい

int m1[][2] = {{1,2}, {3,4}};

2 番目の質問:char *keywords[]は 2 次元配列ではありません! ポインタの配列です。ポインターは配列ではありません。配列はポインタではありません! (右辺値として使用された場合、配列が配列の最初の要素へのポインターに崩壊するだけです)。

更新:実際に質問に答えるには:通常、文字列は読み取り専用ストレージに静的に「割り当て」られます(たとえば、オブジェクトファイル/プログラムに直接書き込まれます)。したがって、配列を次のように宣言することも間違っていchar *[]ますconst char *[]

于 2012-04-19T19:31:56.460 に答える