3

我将 GCC 4.7.2 (C99) 和 Atmel Studio 6 用于微控制器项目。

我想定义一系列一维数组,然后将它们排列成各种二维数组以用于预定义序列。

例如:

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#)。有没有办法使用定义/命名的一维数组列表来分配二维数组的元素?(无论是在编译时还是运行时,都没有关系。)

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 回答