C中结构数组的数组[重复]
Posted
技术标签:
【中文标题】C中结构数组的数组[重复]【英文标题】:Array of array of struct in C [duplicate] 【发布时间】:2022-01-10 10:13:23 【问题描述】:我想创建一个结构数组的数组。这里的错误在哪里?实际上,我有 2 个具有 4 个状态(模式)和 3 个参数(a、b、c)的 LED。 提前谢谢你。
typedef struct
int a;
int b;
int c;
CfgType;
CfgType Led[4][2];
Led[4][0]=
/* Pattern a b c */
/*00*/ /*STATE0*/ 5 , 100 , 2 ,
/*01*/ /*STATE1*/ 5 , 100 , 1 ,
/*02*/ /*STATE2*/ 100 , 100 , 0 ,
/*03*/ /*STATE3*/ 100 , 100 , 0 ,
;
Led[4][1]=
/* Pattern a b c */
/*00*/ /*STATE0*/ 5 , 100 , 2 ,
/*01*/ /*STATE1*/ 5 , 100 , 1 ,
/*02*/ /*STATE2*/ 100 , 100 , 0 ,
/*03*/ /*STATE3*/ 100 , 100 , 0 ,
;
【问题讨论】:
您不能将任何内容分配给数组。尝试用这些值来初始化它。由于您没有完整的 sn-p,因此无法看到这些部分是否靠近在一起(即紧邻定义的分配者)或位于某些单独的位置。 您可以将数组视为有 4 行 2 列。这些行位于偏移量 0、1、2 和 3。Led[4]
是偏移量 4,它在数组之外。
【参考方案1】:
您不能将任何内容分配给数组。尝试用值来初始化它。
除了那个元素Led[4]
不存在。最大索引为3
。
您还切换了数组的维度。您似乎想要 2 个元素包含 4 个结构元素。
如下所示:
typedef struct
int a;
int b;
int c;
CfgType;
CfgType Led[2][4] =
[0] =
[0] = .a = 5, .b = 100, .c = 2 ,
[1] = .a = 5, .b = 100, .c = 1 ,
[2] = .a = 100, .b = 100, .c = 0 ,
[3] = .a = 100, .b = 100, .c = 0
,
[1] =
[0] = .a = 5, .b = 100, .c = 2 ,
[1] = .a = 5, .b = 100, .c = 1 ,
[2] = .a = 100, .b = 100, .c = 0 ,
[3] = .a = 100, .b = 100, .c = 0
;
这个例子使用了指定的初始化器,这使得它可以抵抗在两者之间添加新值或重新排序
【讨论】:
我不知道指定的初始化程序语法。感谢分享,酷! 它们是用 C99 引入的,我认为它们确实是个好东西。 它使代码更加冗长,但我认为它们很棒,因为当你明确表达时,更难自取其辱。 没错,你并不真的需要将它用于数组索引,但对于结构成员来说,它们值得额外输入。【参考方案2】:首先,交换声明中的数组大小。它们应该颠倒过来。 然后,您可以跳过分配并直接初始化数组,如下所示:
typedef struct
int a;
int b;
int c;
CfgType;
CfgType Led[2][4] =
/* Pattern a b c */
/*00*/ /*STATE0*/ 5 , 100 , 2 ,
/*01*/ /*STATE1*/ 5 , 100 , 1 , >
/*02*/ /*STATE2*/ 100 , 100 , 0 ,
/*03*/ /*STATE3*/ 100 , 100 , 0 ,
,
/* Pattern a b c */
/*00*/ /*STATE0*/ 5 , 100 , 2 ,
/*01*/ /*STATE1*/ 5 , 100 , 1 , >
/*02*/ /*STATE2*/ 100 , 100 , 0 ,
/*03*/ /*STATE3*/ 100 , 100 , 0 ,
;
我用 gcc 编译,效果很好。
【讨论】:
以上是关于C中结构数组的数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章