嵌入式系统高级c语言<8.结构体>

1. 概念

用于存放不同类型数据数据类型,例如int,float,结构体只是一种特殊的数据类型。

2. 常用的几种定义方式

第一种:先定义结构体类型,再定义结构体类型变量
struct data
{
     int day;
     int month;
     int year;
};
此时不开辟内存。
struct stu time1,time2;//定义结构体变量
此时开辟了内存。

第二种:定义结构体类型的同时定义结构体变量
struct data
{
     int day;
     int month;
     int year;
} time1,time2;

第三种:直接定义结构体类型变量
struct
{
     int day;
     int month;
     int year;
} time1,time2;
缺点:后续不能再定义变量,因为没有结构体类型名字

第四种:用typedef定义
typedef struct data
{
     int day;
     int month;
     int year;
}STU;
STU stu1,stu2;或者struct data stu1,stu2;
1. 完成结构体类型struct data的定义
2. typedef 为结构体变量起了一个别名叫STU,相当于struct data == STU

第五种:这里可以省略data:
typedef struct
{
     int day;
     int month;
     int year;
}STU;
STU stu1,stu2;
这样只能通过STU 去定义变量,而不能使用struct data去定义了。

个人觉得采用第五种比较好。

3. 结构体对齐

规则1 :结构体(struct)的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存放在offset为该数据成员大小的整数倍的地方(比如int在32位机为4字节,则要从4的整数倍地址开始存储)。

规则2:如果一个结构体B里嵌套另一个结构体A,则结构体A应从offset为A内部最大成员的整数倍的地方开始存储。(struct B里存有struct A,A里有char,int,double等成员,那A应该从8的整数倍开始存储。),结构体A中的成员的对齐规则仍满足原则1、原则2。

Tips:

  • 结构体A所占的大小为该结构体成员内部最大元素的整数倍,不足补齐。
  • 不是直接将结构体A的成员直接移动到结构体B中

规则3:结构体的总大小,也就是sizeof的结果,必须是其内部最大成员的整数倍,不足的要补齐。

4. 结构体初始化

1. struct stu time1={0};

2. memset(&time1, 0, sizeof(time1));

备注:

1. 只声明结构体类型是不开辟内存空间的,只有定义了变量才会开辟内存。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值