3

マイクロコントローラ プロジェクトに GCC 4.7.2 (C99) と Atmel Studio 6 を使用しています。

一連の 1 次元配列を定義し、これらを事前定義されたシーケンスのさまざまな 2 次元配列に配置したいと考えています。

例えば:

unsigned char a1[2] = { 0b00000001, 0b00000010 };
unsigned char a2[2] = { 0b00000010, 0b00000010 };
unsigned char a3[2] = { 0b00000100, 0b00000010 };

unsigned char pattern1[1][2] = { a1, a2, a3 };

ただし、これにより次のエラーが発生します。

初期化要素はロード時に計算できません

コンパイル後に配列を設定できます-

unsigned char pattern1[1][2];

void setup_patterns()
{
    pattern1[0] = a1;
    pattern1[1] = a2;
    pattern1[2] = a3;
}

しかし、配列の数とパターンの数を考えると、配列の最初のセットのカンマ区切りのリストを提供できる方がはるかに簡単です。(ここに示す例は非常に単純化されています。)

私は C プログラミングの経験があまりありません (C# には慣れています)。定義済み/名前付きの 1 次元配列のリストを使用して 2 次元配列の要素を割り当てる方法はありますか? (コンパイル時か実行時かは関係ありません。)

4

1 に答える 1

1

これを試して:

unsigned char *pattern1[] = { a1, a2, a3 };

unsigned char pattern1[1][2]は次が必要です。

unsigned char pattern1[1][2] = { {1, 1} };

したがって、ネストされた配列の初期化によってケースをコンパイルできます。

unsigned char pattern1[3][2] = { 
    { 0b00000001, 0b00000010 },
    { 0b00000010, 0b00000010 },
    { 0b00000100, 0b00000010 },
};
于 2013-06-13T04:08:19.350 に答える