如何在编译时初始化先前定义的数组的数组?

时间:2013-06-13 03:19:54

标签: arrays gcc initialization

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

1 个答案:

答案 0 :(得分: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 },
};