C语言进阶要点笔记4


目录

  • 五、结构体

1、定义和概念
2、结构体数组
3、结构体指针
4、结构体内存分配
5、位段(位域)

  • 六、共用体
  • 七、枚举类型

  • 五、结构体

1、定义和概念

struct 结构体类型名

{

         成员列表

};

可以先说明再定义,也可以在分号之前接着就定义

在分号之前定义结构体变量,同时省略结构体类型名,则之后不能再定义此种结构体变量,此时定义了就是唯一的,常用于使用次数有限的全局变量

typedef struct (结构体类型名可有可无)

{

       成员列表

}类型名称;    分号前不能再定义变量

若要定义变量则只需  类型名称加变量名  

变量名加点加成员名进行赋值

结构体说明时其成员列表可以使另一结构体,使用的时候可多级引用

相同类型的结构体变量可以直接相互赋值

2、结构体数组

结构体数组是数组,由若干个相同类型的结构体变量组成的集合

struct 结构体类型名 数组名[元素个数];

3、结构体指针

结构体指针定义和赋值的方法和普通变量一样

结构体整体引用也和普通变量一样

但引用结构体成员时不同,需要加括号,.的优先级比*高,(*ps).num

加括号麻烦,可用指向运算符(->)代替,ps->num

当有嵌套,引用里面结构体的成员时,第一层用指向运算符第二层用点运算符

4、结构体内存分配

#pragma pack (value)时的指定对齐值value。

value只能是: 1 2 4 8等

字节对齐,当前成员为value整数倍保持不变;当前成员小于value,但是加上后一成员刚好是value的整数倍也不变;当前成员小于value,加上后一成员也小于value的整数倍则补成value的整数倍。

可用sizeof测量所占空间

5、位段(位域)

struct packed_data
{
    unsigned int a:2;
    unsigned int b:6;
    unsigned int c:3;
    unsigned int  :1; // 无意义的位段
    unsigned int d:4;
    unsigned int i;
} data;

冒号后面数字表示占几位,不能对位段成员取地址

赋值时不要超出位段定义的范围,赋值超出范围会进行截取操作

可以定义无意义的位段,单纯的占空间,以保证后面的成员占据所需要的位

同一个结构体中,成员变量可以同时包括位段和普通成员变量


  • 六、共用体

共用体和结构体类似,也是一种构造类型的数据结构

共用体的定义方法也和结构体的定义方法非常相似,将struct改成union即可,其他的使用方法一样,但是不允许有位段

在进行某些算法的时候,需要将几种不同类型的变量存到同一段内存单元中,几个变量所使用的的空间相互重叠

共用体的大小是其占内存长度最大的成员的大小

共用体的成员在同一时间只有一个有效,常用于网络协议发送过程中


  • 七、枚举类型

将变量的值一一列举出来,变量的值只限于列举出来的值的范围内

enum 枚举类型名

{

         枚举值列表, (成员之间用逗号隔开)

};

也可用typedef

用枚举的地方都能用宏定义代替,反之不行

枚举成员可以为任意内容,其实际值为整数,默认从0开始递增,也可以通过给成员赋值改变成员对应的整数值

枚举变量的定义:enum 枚举类型名 枚举变量名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值