2016-03-31 28 views
0

私はC言語でレンダリングテーブル関数を作成したいと思います。おそらく最悪の言語です。C三次元配列の初期化

テーブルを初期化する際に少し問題があります。文字列の二次元配列です。charの3次元配列になります。

私はtridimensionnal配列をそのように初期化することはできませんよ。

char *table[][] = { 
    { "hello", "my", "friend" }, 
    { "hihi", "haha", "hoho"}, 
    NULL 
}; 

をしかし、私はCコンパイラ、すべての次元の長さを計算することができ、エラー

test_table.c:8:11: error: array type has incomplete element type ‘char *[]’ 
    char *table[][] = { 

を取得しますか?

Iはまた、table[][][]*持つすべての可能な変形として宣言することを試みた....

+3

アレイ最初の寸法を除く寸法は固定(指定)する必要があります。 'char * table [] [3]'、おそらく 'char table [] [3] [7];'を使用してください。 –

+0

コンパイラがそれを自分で計算することはできないので、それほど難しくありません。お手伝いありがとう。 –

答えて

1

第除く配列の次元が指定された(固定されなければなりません)。 char *table[][3]、または多分char table[][3][7]を使用します。

#include <stdio.h> 

int main(void) 
{ 
    char *table1[][3] = 
    { 
     { "hello", "my", "friend" }, 
     { "hihi", "haha", "hoho"}, 
    }; 

    char table2[][3][7] = 
    { 
     { "hello", "my", "friend" }, 
     { "hihi", "haha", "hoho"}, 
    }; 

    for (int i = 0; i < 2; i++) 
     for (int j = 0; j < 3; j++) 
      printf("[%d][%d] = [%s]\n", i, j, table1[i][j]); 

    for (int i = 0; i < 2; i++) 
     for (int j = 0; j < 3; j++) 
      printf("[%d][%d] = [%s]\n", i, j, table2[i][j]); 

    return 0; 
} 

出力:

#include <stdio.h> 

int main(void) 
{ 
    char **table3[] = 
    { 
     (char *[]){ "hello", "my", "friend" }, 
     (char *[]){ "hihi", "haha", "hoho" }, 
     NULL, 
    }; 

    for (int i = 0; i < 2; i++) 
     for (int j = 0; j < 3; j++) 
      printf("[%d][%d] = [%s]\n", i, j, table3[i][j]); 

    return 0; 
} 

出力:

[0][0] = [hello] 
[0][1] = [my] 
[0][2] = [friend] 
[1][0] = [hihi] 
[1][1] = [haha] 
[1][2] = [hoho] 
[0][0] = [hello] 
[0][1] = [my] 
[0][2] = [friend] 
[1][0] = [hihi] 
[1][1] = [haha] 
[1][2] = [hoho] 

なC99 '複合リテラル' を使用するなど、あまりにもそれを行うための他の方法は、あります。

[0][0] = [hello] 
[0][1] = [my] 
[0][2] = [friend] 
[1][0] = [hihi] 
[1][1] = [haha] 
[1][2] = [hoho] 
+0

私はC99の '化合物のリテラル'のように、良いトリックが好きです!ありがとう! –

0

下記参照コード:

char *first[] = { "hello", "my", "friend" }; 
char *second[] = { "hihi", "haha", "hoho" }; 
char **table[] = { first, second, NULL }; 
関連する問題