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中结构数组的数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

P /在结构中调用定义长度的C char *数组[重复]

将C或C99中的结构数组初始化为所有相同的值[重复]

在c语言中输入数组两个数组,查找重复元素并输出怎么写啊

C语言,删除数组中的重复数字然后输出

c语言怎么判断两个数组中重复数字的个数?

c语言编程:输出数组中重复出现的数