嵌入式学习第十六天——结构体,共用体

结构体 

结构体类型 --- 用来描述复杂数据的一种数据类型
构造类型 --- 用户自定义类型

声明一个结构体类型的一般形式

struct 结构体名
{
    成员列表;
};
(1)struct 关键字
表示是在构造一个结构体类型
(2)结构体名
用来描述结构体这个类型的一个名称
(3)成员列表
表示要描述的的复杂数据中用到的具体的成员变量,定义的方式与之前变量的方式相同,多个成员变量之间用分号隔开
(4)最后有一个;表示结束
eg:
struct student
{
    char name[30];
    int sno;
    float score;
    char sex;
}; //表示定义出一个数据类型


注意
1.结构体类型的使用过程
a.先定义出类型
b.定义变量
2.定义变量
struct 结构体名 变量名

结构体初始化

struct student stu = {};
初始化看每个成员变量具体是什么类型,根据各个成员变量自身的数据类型,进行初始化。
初始化的顺序,按照定义的顺序,依次初始化

结构体变量的引用:

引用到成员需要运用结构体成员运算符 --- '.'
使用:结构体变量名.成员名

->  //指向结构体成员的运算符
结构体指针->成员名

结构体类型的定义形式

形式1
struct demo
{
};
struct demo d;
形式2:定义类型的同时,定义变量
struct demo
{
}d;
形式3:定义类型的同时,定义变量,可以省略结构体名
struct 
{
}d;    //如果结构体只用一次可以这么用

结构体类型的大小

判断依据:内存对齐          
结构体对齐规则
1.在32位的平台上,默认都是按4字节对齐的。 
2.对于成员变量,
   各自在自己的自然边界上对齐。
   char  -- 1字节 
   short -- 2字节 
   int   -- 4字节 
3.如果 成员变量中有比4字节大。      
  此时 整个结构体 按照4字节对齐。 //32位的平台 
4.如果 成员变量中没有有比4字节大。  
  此时 整个结构体 按照最大的那个成员对齐。   
  //32位的平台   
  //如果有超过4字节 ,按照4字节对齐
  //如果没有超过4字节的,则按成员变量中最大对齐 
 ----------------------------------------------
  //64位的平台
  //如果超过4字节的,按超过的最大的成员变量对齐 
  //如果没有超过4字节的,则按成员变量中最大对齐
 

qsort(快速排序)

void qsort(
       void *base,                       //要排的数组的首地址 
       size_t nmemb,                 //数组元素的个数
       size_t xiae,                      //单个元素的大小
       int (*compar)(const void *a,const void *b)        //比较函数——提供比较的依据,需要自己写
)

功能:排序数组

总结:
1.理解结构体概念及用途
2.使用方法
  a.自己构造出这个结构体类型
  b.类型使用:定义变量;定义数组;定义指针;做函数形参(结构体类型指针);做函数返回值
3.考点:结构体类型的大小计算

共用体:union

语法:

 union 共用体名
{
    成员变量;
};
eg:
union demo
{
    char a;
    short b;
    int c;
};

共用体:共用了一块内存空间,公用了最大成员的空间

注意:
1.共用体初始化时,只能给一个值,默认时给到第一个成员符。
2.共用体变量中的值,取决于最后一次给到的值,还有看能影响几个字节

对比结构体
1.结构体中各个成员拥有自己独立空间
2.共用体中成员共用一块空间

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值