C语言中有许多类型,比如整形int,字符型char,双精度浮点型double等等。这些类型可以存放一些值或者字符。但是如果我想要一种类型存放一本书,显然是没有的,那么这时候就需要自定义类型了,也就是结构体,这本书有书名,作者,价格,ISBN码等等,我们就专门创建一个结构体来存放这些信息。一.结构体1.结构体类型声明下面我们来声明一个名字为Book的结构体类型structBook//创建结构体类型需要加上struct关键字后面就是这个类型的名字Book{ //大括号内部就可以创建结构体里面的成员变量,以后就可以通过Book类型找到里面的成员 charname[20]; charautor[10
文章目录📝前言🌠什么是位段?🌉位段的内存分配🌉VS怎么开辟位段空间呢?🌉位段的跨平台问题🌠位段的应⽤🌠位段使⽤的注意事项🚩总结📝前言本小节,我们将学习结构体最后的知识:结构体实现位段,阿森将会和你一起去学习什么是位段?位段的内存分配,VS怎么开辟位段空间呢?位段跨平台问题,随即位段的应用,最后我们也要了解它的注意事项。文章干货满满,很容易理解,学习起来吧!😊🌠什么是位段?位段是C语言中结构体的一种数据类型。位段允许在结构体中定义具有指定位数的成员,这些成员可以占用结构体变量内部的连续比特位。位段的声明和结构是类似的,有两个不同:位段的成员必须是int,usignedint或signedint,
引言对位段进行介绍,什么是位段,位段如何节省空间,位段的内存分布,位段存在的跨平台问题,及位段的应用。 ✨ 猪巴戒:个人主页✨ 所属专栏:《C语言进阶》 🎈跟着猪巴戒,一起学习C语言🎈目录引言什么是位段?位段的作用位段是如何节省空间?位段的内存分配位段的内存分配位段的跨平台问题 位段的应用什么是位段?位段的声明和结构是类似的,有两个不同:位段的成员必须是整形家族的类型位段的成员名后面有一个冒号和一个数字。冒号后面的数字表示的是这个变量将使用多大的内存(单位是比特位)。int_n:2 表示的是_n这个整形变量本来是4个字节(也就是
文章目录1.结构体1.1什么是结构体1.2结构体类型声明1.3结构体变量的定义和初始化1.4结构体的访问2.结构体对齐2.1如何对齐2.2为什么存在内存对齐?3.结构体实现位段3.1什么是位段3.2位段的内存分配3.3位段的跨平台问题3.4位段的应用3.5位段使用注意事项4.联合体4.1联合体的声明4.2联合体的特点4.3联合体的大小4.4联合体与结构体的对比5.枚举5.1枚举类型的声明5.2枚举类型的优点1.结构体1.1什么是结构体C语言已经提供了内置类型,如:char、short、int、long、float、double等,但是只有这些内置类型还是不够的,假设我想描述学生,描述⼀本书,这
大家好,我是苏貝,本篇博客带大家了解结构体和位段以及枚举,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️这是这个系列的第二篇,上一篇详细介绍了结构体的基本知识,详情请点击目录一.结构体1.1结构体内存对齐1.2修改默认对齐数1.3结构体传参二.位段2.1什么是位段2.2位段的内存分配2.3位段的跨平台问题三.枚举3.1枚举类型的定义3.2枚举的使用3.3枚举的优点四.联合(共用体)4.1联合类型的定义4.2联合的特点4.3联合的应用4.4联合大小的计算一.结构体1.1结构体内存对齐现在大家应该都已经掌握了结构体的基本使用了,现在我们深入讨论一个问题:计算结构体的大小。这也是一个特别热
个人主页:点我进入主页专栏分类:C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶C语言刷题欢迎大家点赞,评论,收藏。一起努力,一起奔赴大厂。目录个人主页:点我进入主页 1.前言2.结构体2.1结构体声明2.2结构体初始化2.3结构体的自引用2,4结构体的内存对齐 3.位段3.1什么是位段3.2位段的内存分配3.3位段的跨平台性4.枚举 4.1枚举声明4.2枚举的优点4.3枚举的使用5.联合体5,1联合体的声明5.2联合体的大小5.3联合体的使用 1.前言 随着我们深入学习C语言,我们发现单纯的int,char,double,float类型已经不能满足我们
目录 前言1、结构体1.1、结构体类型的声明1.2、特殊的结构体类型声明1.3、结构体的自引用1.4、结构体的定义和初始化1.5、结构体成员变量的调用1.6、结构体内存对齐 1.6.1、offsetof1.6.2、结构体大小的计算1.6.3、为什么存在内存对齐? 1.7、 修改默认对齐数1.8、结构体传参2、位段 2.1、什么是位段2.2、位段的内存分配2.3、位段的跨平台问题2.4、位段的应用 3、枚举3.1、枚举类型的定义3.2、枚举的优点 4、联合体(共用体)4.1、联合类型的定义4.2、联合体的特点4.3、联合大小的计算 前言C语言的内置类型有:char、short、int、long、
之前学完结构体,有没有对结构体的大小会很疑惑呢??其实结构体在内存中存储时会存在内存对齐,捎带讲讲位段,枚举,和联合,跟着小张一起学习吧结构体内存对齐结构体的对齐规则:第一个成员在与结构体变量偏移量为0的地址处。其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。对齐数=编译器默认的一个对齐数与该成员大小的较小值。VS中默认的值为8结构体总大小为最大对齐数(每个成员变量都有一个对齐数)的整数倍。如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。例1structS1{charc1;inti;charc2;
位段1.什么是位段2.位段的内存分配3.位段的跨平台问题前言:相信大家写题的时候,都会遇到这种问题:这个专业名词是什么?不知道,算了,不做了(反正也不是能力问题)位段这个名词就很常见,接下来,砸门来聊一聊有关位段的这些事1.什么是位段位段的结构和声明和结构体是类似的,有两个不同:1.位段的成员必须是整形家族(int、unsignedint、signedint或者是char)2.位段的成员名后边有一个冒号和数字🌰structS{ inta:5; intb:7; intc:30;};//S就是一个位段类型那我们就有疑问了:位段为甚么是这种的结构(:数字),这样做的好处是什么?位段S的大小是多少?那
目录1.位段1.1什么是位段1.2位段的内存分配1.3位段的跨平台问题2.枚举2.1枚举类型的定义2.2枚举的优点3.联合(共用体)3.1联合类型的定义3.2联合的特点3.3联合大小的计算1.位段1.1什么是位段位段的声明和结构体是类似的,有两个不同:1.位段的成员必须是int、unsignedint或signedint。2.位段的成员名后边有一个冒号和一个数字。比如:structA{ int_a:2; int_b:5; int_c:10; int_d:30;};A就是一个位段类型。那位段A的大小是多少?printf("%d\n",sizeof(structA)); 在VS上位段A的大小是8