自定义类型——结构体类型

本文详细介绍了C语言中结构体的声明方法、创建过程,包括命名和匿名结构体,以及结构体自引用的概念。还探讨了内存对齐规则及其原因,以及位段的使用,旨在帮助开发者更好地掌握结构体在内存管理中的优化技巧。
摘要由CSDN通过智能技术生成

一,结构体类型的声明

1.结构体的声明

struct tag      //结构体类型名

{

    member-list;  //结构体成员

};  //分号不能丢 

 2,结构体类型的创建和初始化

struct stu
{
    char name[20];//姓名
    int age;//年龄
    char sex[5];//性别
};
int main()
{
    struct stu s = { "张三",20,"男"};  //创建一个结构体变量s
    printf("%s\n", s.name);
    printf("%d\n", s.age);
    printf("%s\n", s.sex);
}

这种创建是固有化的,最普遍简单的创建方式,下面这种为匿名创建

struct 
{
    char name[20];//姓名
    int age;//年龄
    char sex[5];//性别
}s;

这是一个匿名结构体类型,没有名字,直接创建一个结构体变量s,如果这样创建,就不能再创建其他的结构体变量。

3,结构体的自引用

struct node
{
    int data;
    struct node* next;
};

 

 结构体的自引用可以理解为上图的方式,先存放一个整形变量,再存一个结构体指针,该指针指向下一个结构体。

二,结构体内存对齐

该部分知识是用来计算结构体内存大小的。

内存对齐规则:

1,结构体第一个成员对齐到和结构体起始位置偏移量为0的地址处。

2,其他成员要对齐到某一个数字(对齐数)的整数倍的地址处。

对齐数=编译器默认的对齐数与该成员变量大小的较小值。vs中默认为8.

3,结构体的总大小为最大对齐数(每个成员都有一个对齐数,所有对齐数中最大的)的整数倍。

4,如果存在了结构体嵌套,嵌套的结构体成员存到自己成员最大对齐数的整数倍处,最后结构体的大小是 最大对齐数(每个成员都有一个对齐数,所有对齐数中最大的)的整数倍。

 

 存在结构体嵌套

 

 

内存对齐的原因:在访问未对齐的内存时,处理器需要访问两次才能拿到数据;而内存对齐时,只需在对齐的位置访问一次就可以拿到数据,虽然浪费了空间,但是节省了时间。也就是拿时间来换取空间的做法。

三,位段 

1,位段的成员可以是int, unsigned int ,char等。

2,位段的后面必须有一个冒号和一个数字。

struct  s
{
    int a:2;  //a只占2个比特位
    int b:5;  //b只占5个比特位
    int c:10; //c只占10个比特位
    int d : 30; //d只占30个比特位
};

 可以看出,位段是用来节省内存的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值