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