C语言 知识点整理8 (结构、联合、枚举)

结构   

(一般结构体变量存放在堆内存中)

    struct 结构体名
    {
        类型1 成员名1;
        类型2 成员名2;
        ...
    };


初始化方法:
struct 结构体名 变量名 = {v1,v2,v3...};
    注意:必须要根据成员设计的数据初始化

struct 结构体名 变量名 = {.成员名1=v1,.成员名3=v3,...};
    只初始化某些成员,可以不用按照顺序初始化

    注意:同类型的结构体变量可以直接给结构体变量初始化、赋值

访问成员:
        结构变量名.成员名

        结构指针->成员名

typedef重定义结构体类型:
方式1:
typedef struct 结构体名 结构体名;
方式2:
typedef struct 结构体名
{
    ...
}结构体名;

之后就可以不使用struct关键字来定义结构体变量

如何计算结构体的字节数:

    结构体成员的顺序会影响它的总字节数,如果能够在设计结构体时,合理安排成员顺序可以大大节约内存

内存对齐:

        假定第一个成员是从零地址开始,存储每个成员的地址编号必须满足能被该成员的字节数整除,如果不能整除则填充空白字节

内存补齐:

        结构体的总字节数,必须是它最大成员的字节数的整数倍,如果不是则在末尾填充空白字节

        在Linux系统下计算结构体的对齐、补齐时,如果成员的字节数超过了4字节,则按照4字节计算(windows系统是按照实际情况计算)

联合    

与结构区别是所有成员共用一块内存,一个成员的值发生改变,其他成员也随之改变  

union Data
{
    char ch[5];
    int num;
};//字节数是8
注意:计算联合的字节数要考虑内存补齐,联合天然是内存对齐
    
    如何判断操作系统的大小端?
        假如十六进制整数0x01020304存储在以0x0A起始的四个字节内存中:
        高位数据存储在高位地址:(0x0A:04 0x0B:03 0x0C:02 0x0D:01)小端系统
        高位数据存储在低位地址:(0x0A:01 0x0B:02 0x0C:03 0x0D:04)大端系统

    个人计算机系统一般都是小端系统,而UNIX服务器和网络设备都是大端系统,本地字节序是小端模式,网络字节序是大端模式

枚举

枚举就是把一种数据类型可能出现的所有值全部罗列出来,取一个有意义的名字,除此之外的数据,如果赋值给该枚举变量就是非法的(但C语言为了速度并不做警告)

     enum direction
    {
        UP = 183,
        DOWN = 184,
        RIGHT = 185,
        LEFT = 186,
    };
如果不给成员值,枚举常量的值默认从0开始,依次+1,如果某个设置了值,后面的会在该值的基础上逐渐+1

    使用枚举原因:
        为无意义的数值起一个有意义的名字,提高代码的可读性,并且有相对较高的安全性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LJIEIJL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值