4

多次元配列に文字列値を割り当て、配列を関数の引数として送信し、それをメイン関数に戻す方法は? これを試しましたが、エラーが発生します:

char a[250][250][250];   // does not work
a[][0][2] = "0";         // does not work
a[][1][2] = "0";         // does not work

char a[][2][2] = {"0", "1"};  // works

// error: expected primary-expression before ']' token
a[i][j][max] = add_func(a[i][j][], i, j); 
4

3 に答える 3

6

文字列テーブルを初期化するには、中括弧を使用できます。そして、最も外側の次元(他にどのように呼び出すことができるかわかりません)または四角形の最も左の数はオプションです。

だからこれはうまくいく

char table[][3][10] = {
    {"row1-col1", "row1-col2", "row1-col3"},
    {"row2-col1", "row2-col2", "row2-col3"},
    {"row3-col1", "row3-col2", "row3-col3"},
    {"row4-col1", "row4-col2", "row4-col3"}
    };

入力する必要はありませんtable[4][3][10]。コンパイラが計算します。のサイズtableは 120 バイトです。中身は全て文字列なので使えます

char *table[][3] = ...

これにより、20% のスペースが節約されます。

中括弧は、初期化フェーズでのみ使用できます。その後ではありません。したがって、次のコードは機能しません。

a[][0][2] = "0"; 
于 2012-12-30T09:28:58.470 に答える
6

宣言後、割り当てることはできませんが、使用しますstrcpy()

char a[250][250][250];

strcpy(a[0][1],"0");

または宣言時に割り当てます。

char a[250][250][250] = {"0","2"};  
char a[][250][250] = {"0","2"}; 

または、単一の文字を割り当てたい場合。

a[i][j][k] = '0'; 

ここで、i、j、k は 250 未満の任意の値です


Cで3D配列を宣言および初期化する方法

一般a[3][4][2]に、次のように表示できる 3 次元配列です。

a[3][4][2]: 3 つの 2 次元配列で構成され、各 2 次元配列は 4 行 2 列で構成されます。次のように宣言できます。

char a[3][4][2] =  { 
                       { //oth 2-D array 
                         {"0"},
                         {"1"},
                         {"2"},
                         {"4"}
                       },
                       { //1th 2-D Array
                         {"0"},
                         {"1"},
                         {"2"},
                         {"4"}
                       },
                       { //2nd 2-D array
                         {"0"},
                         {"1"},
                         {"2"},
                         {"4"}
                       },
                   };  

: "1" は 2 つの文字を意味し、null ('\0') 文字から 1 つ追加されます。

整数配列の場合:

int a[3][2][3]=  
        {
            { //oth 2-D array, consists of 2-rows and 3-cols
            {11, 12, 13},
            {17, 18, 19}
            },
            {//1th 2-D array, consists of 2-rows and 3-cols
            {21, 22, 23},
            {27, 28, 29}
            },
            {//2th 2-D array, consists of 2-rows and 3-cols
            {31, 32, 33},
            {37, 38, 39}
            },
        };

理解するためのリンク


2 番目のエラー:

これa[i][j][max]に char は文字列ではなく割り当てることができるので、

a[i][j][max] = '0' ; // is correct  expression 

しかし

a[i][j][max] = "0";  // is not correct, wrong   

WhozCraigのコメントを読んでください。スタックで巨大なメモリを宣言しています!


あなたのコメントによると:

関数宣言:

char add_func(char a[250][250][250], int i, int j); // function definition  

このようにしてみてください:

  char a[250][250][250];
  a[i][j][max] = add_func(a, i, j );
于 2012-12-30T08:58:05.817 に答える
2

おそらく、代わりにポインタを使用したいと思うでしょう:

char *a[2][2] = { "0", "1", "2", "3" };
于 2012-12-30T09:05:13.787 に答える