打印
[其它应用]

C技巧--结构体初始赋值

[复制链接]
1371|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我们将定义个结构体数组,每个结构体都代表有不同成员的年龄/体重/身高信息。
方法1:类数组型赋初值
#include <stdio.h>

typedef u_int8_t u8;
typedef u_int16_t u16;
typedef u_int32_t u32;

typedef enum
{
   Harry,
   Jack,
   Jane,
   Name_End
}e_Name;

typedef struct
{
   u8 age;
   u16 weight;
   u8 Height;
}st_Test;

/*如下所示,类似于数组一样的初始赋值*/
st_Test  gstNameList[Name_End] =
{
  {17,120,166},
  {21,133,172},
  {26,140,185}
};

int  main(void)
{
   u8 u8Index = 0;

   for(u8Index = 0; u8Index < Name_End; u8Index++)
  {
       printf("age :%d, weight:%d,Name:%d\n",gstNameList[u8Index].age,gstNameList[u8Index].weight,gstNameList[u8Index].Height);
  }
}
运行后输出如下结果,可见该方法是可以完成结构体的初始值赋值动作,但该方法的弊端就是不直观,与结构体数组成员必须呈现顺序对应关系,否则会赋值错误,且无法直观的看到是给哪一个成员进行赋值。



方法2:结构体成员挨个赋值

将上述范例代码中的结构体成员赋值修改为下方代码所示,大家可以发现,即使不按照枚举顺序赋值,也一样不影响最终的赋值结果,如此就很方便对结构体数组成员进行赋值动作。
st_Test  gstNameList[Name_End] =
{
  [Jane].age = 26 ,[Jane].weight = 140, [Jane].Height = 185,
  [Harry].age = 17, [Harry].weight = 120, [Harry].Height = 166,
  [Jack].age = 26,[Jack].weight = 140,[Jack].Height = 172
};
但是,此类的赋值方式需要每个数组成员的结构体成员都要罗列出来挨个赋值,虽然很直观每个量的具体赋值情况,但代码也显得臃肿。

方法3:单列赋值
如下列代码所示赋值方式,即结合了类数组赋值的精简性,有能直观的看出是给那个结构体数组成员进行赋值,且不按照枚举顺序赋值也不影响最终赋值顺序。在对于大量结构体数组成员赋值的赋值场景下,还是显得很简便的。
st_Test gstNameList[Name_End] =
{
  [Jane] = {26,140,185},
  [Harry] = {17,120,166},
  [Jack] = {21,133,172},
};*
如上大家可以根据自己的使用场景,使用不同的结构体初值赋值方式。

使用特权

评论回复
沙发
OKAKAKO| | 2023-11-2 09:08 | 只看该作者
一般在设置的时候就可以赋初始值吧

使用特权

评论回复
板凳
小夏天的大西瓜| | 2023-11-2 09:22 | 只看该作者
结构体在C中很重要

使用特权

评论回复
地板
AdaMaYun| | 2023-11-6 21:23 | 只看该作者
一般情况下用时附初值

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2078

主题

7750

帖子

11

粉丝