首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C语言进阶-自定义类型:结构体位段枚举联合

    目录 前言 结构体struct 结构体的声明 结构的自引用 结构体变量的定义和初始化 空结构体大小 结构体内存对齐 修改默认对齐数 宏offsetof 结构体传参 柔性数组 structclass的区别.../输出结果:12 解释: 第一个成员c1在结构体变量偏移量为0的地址处 对于c2它的对齐数为4(int大小为4,小于平台默认值8),该变量要对齐到偏移量为4的倍数处,即从偏移量为4的位置开始存放...c1在结构体变量偏移量为0的地址处 c2放在偏移量为1的地址处 i放在偏移量为4的地址处(对齐到偏移量为对齐数4的倍数处) 示例3: struct S3 { double d; char c;...int i; }; printf("%d\n", sizeof(struct S3)); //输出结果:16 解释: 第一个成员d在结构体变量偏移量为0的地址处 c放在偏移量为8的地址处 i放在偏移量为...(struct S4)); //输出结果:48 解释: 第一个成员c1在结构体变量偏移量为0的地址处 s3放在偏移量为8的地址处(s3最大对齐数为8) d放在偏移量为24的地址处(对齐到偏移量为对齐数

    70620

    C语言】指针结构

    ✨作者:@平凡的人1 ✨专栏:《C语言从0到1》 ✨一句话:凡是过往,皆为序章 ✨说明: 过去无可挽回, 未来可以改变 ---- 感谢您的点赞关注,同时欢迎各位有空来访我的平凡舍 --...-- 文章目录 @[toc] ✍前言 指针 什么是指针 指针类型指针解引用 野指针 指针运算 指针和数组 二级指针 指针数组 结构结构体的声明成员的类型 结构体变量的定义和初始化及访问 结构体传参...结语 ✍前言 指针和结构体这两块内容是非常重要的,可以说是C语言的重点内容了,同时,如果学习C语言版的数据结构,我们可以知道,基本所有的数据结构都是建立在结构体之上的,以及相关操作也要用到指针,指针和结构体也是...C语言的特点,对于一些面向对象的语言来说,如java就没有指针和结构体这种说法存在了。...结构体的声明成员的类型 结构体的声明 struct tag { member-list; }variable-list; //例如一个学生 //typedef:重命名 typedef struct

    82820

    C语言结构体字节对齐 | 结构联合

    ,由规则(1)可得如下; 橙色填充为结构体成员b,因其为int类型(4个字节)且不是第一个成员,由规则(2)可得如下; 绿色填充为结构体成员c,因其为char类型且不是第一个成员,由规则(2)(3)可得如下...a,因其为char类型且是第一个成员,由规则(1)可得如下; 橙色填充为结构体成员b,因其为char类型且不是第一个成员,由规则(2)可得如下; 绿色填充为结构体成员c,因其为int类型且不是第一个成员...,大小为16,由规则(4)可得如下图; 绿色填充为结构体成员c,因其为int类型且不是第一个成员,由规则(2)(3)可得如下; 画红叉内存位置属于因对齐造成的浪费内存。...共用体结构体 共用体 #include #include union stu{ char a; short b; int c; };...2.只给a赋值,但是输出c时输出了a的内容。 分析:内存中用左图来表示结构体,右图表示共用体。结构体的成员在内存中都有各自的空间,而共用体中共用同一块内存。

    2.3K10

    C语言结构结构体指针的使用

    C语言结构结构体指针的使用 tips:最近要好好学习一下数据结构,所以必不可少的就是c语言结构体和结构体指针了,所以就整理一下这些基础知识 c语言结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合...c语言是一门面向过程的编程语言,而结构体的使用在某些层次上跟面向对象有点异曲同工之处了。下面回归正题,学习一下结构体以及结构体指针的知识。...%c",&st3.num,st3.name,&st3.sex);//对于数组,scanf输入的时候不用"&" 123 结构的变量的访问(输出) printf("%d,%s,%c\n", st1...s %c\n",p->num,p->name,p->sex); 1234 //指针访问 struct student *p;//定义结构体指针 p=&st1; printf("%d %s %...---- 附:c语言常见运算符优先级 优先级 运算符 含义 结合方向 1 [] 数组下标 从左向右 () 圆括号 .

    2.1K10

    C语言结构体、联合枚举类型

    于是C语言就定义了一个不同类型数据的集合的数据结构 ————结构体。...准确来说,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。...4.typedef 结构体 struct + 结构体名称这种写法有时候会不会太过冗长了呢,C语言提供了一个很好的解决这种冗长代码的关键字 ,typedef 关键字可以将类型进行重命名...在进行某些算法的C语言编程的时候,需要使几种不同类型的变量存放到同一段内存单元中。也就是使用覆盖技术,几个变量互相覆盖。...这种几个不同的变量共同占用一段内存的结构,在C语言中,被称作“共用体”类型结构,简称共用体,也叫联合体。

    11410

    C语言结构

    前言 在C语言中,有两种类型,一种是内置类型,可以直接使用,包括char short int long long long float double;一种是自定义类型,当内置类型不能满足时,支持自定义一些类型...对齐数 = 编译器默认的⼀个对齐数该成员变量大小的较小值。...来看看这个例子: struct S1 { char c1; char c2; int a; }; struct S2 { char c1; int a; char c2; }; int...对于s1而言:char c1,占一个字节,而VS中默认的值为8,1小,所以选择1,而结构体的第⼀个成员对齐到相对结构体变量起始位置偏移量为0的地址处。所以c1就占了0。...结构体实现位段 结构体讲完就得讲讲结构体实现 位段 的能力 6.1 什么是位段 位段的声明和结构是类似的,有两个不同: 位段的成员必须是 int、unsigned int 或signed int ,在C99

    16210

    C语言——循环结构

    C语言提供了while,do...while,for三种语句构成循环结构。...2的值,则也可能造成死循环,如: for(i = 0;i<100) {        循环语句;(若循环语句不能使表达式2变为假,则变成死循环) }  4,当表达式1,2,3都省略时,此时无限的...while语句等价,格式: for(;;) (4)循环语句的嵌套 分支语句类似,我们可以根据实际需求,将循环语句嵌套,实现多重循环,一般的形式有: 1,while()         { ·...用法: 在switch语句中,break的作用是:结束switch结构。...流程图: (2)continue语句 使用范围:只能用于循环结构中 用法: 当遇到continue语句时,程序会跳过位于 continue 后面的代码,直接回到判断的部分,进行下一轮的循环判断 流程图:

    94010

    C语言结构

    前言 还记得我在总结操作符时,涉及到了结构体,在C语言中类型分为两大类一个是内置类型,一个是自定义类型,常见的内置类型我们不说,我们今天来好好看一看为自定义类型之一的结构体吧 个人主页:小张同学zkf...\n" , sizeof ( struct S1)); 来看一下,这道题char c1变量大小是1吧,它是第一个成员,对齐到偏移量为0的地址处,接下来的成员int i 大小为4,vs默认的...还是按上面的思路分析,首成员大小为1,默认对齐数8比交,1是最大对齐数,因为是首成员,所以从偏移量为0开始,占一个字节,接着这个结构体s3是上面那个练习题的s3,此时我们要知道结构体的对齐数为里面成员的最大对齐数最大的那个数...,上面s3我们在求时最大对齐数中最大值为8,所以被用来当作这个结构体s3的对齐数,默认的8比较相等,所以要在偏移量为8的倍数处存储,这个就在偏移量为8处向后16个字节,到偏移量为23处,第三个成员double...为8个字节默认8比较相等,就在8的倍数处存储,此时就在偏移量24处存储,此时三个成员最大对齐数中的最大值为8,此刻总大小为32正好是8的倍数,所以这个结构提的总大小为32.

    11610

    C语言——结构

    让我们走进结构体 一.结构体 1.1 什么是结构结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。...1.2 结构体的声明 例如用结构体描述一个学生 1.3 特殊的声明 在声明结构体时,可以不完全声明,也就是匿名结构体类型 1.4 结构的自引用 结构的自引用就是自己作为自己的成员变量 但是要注意正确的引用方法...结构体变量的嵌套初始化 1.6 结构体内存对齐 来计算一下结构体的大小 来计算一下结构体的大小如果不了解的话可能会觉得是 6 6 13 为什么最终结果会是这样呢?...这就要掌握首先得掌握结构体的对其原则 1.6.1结构体的对其原则 一. 二.结构体嵌套问题 为什么存在内存对齐?...如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。 因此结构体传参的时候,要传结构体的地址。

    7510

    C语言_结构

    一、结构结构的基础知识 结构是一些值的集合,这些值称为成员变量,结构的每个成员可以是不同类型的变量。...结构体初始化 ---- ---- 四.结构成员的类型 结构成员可以使标量、数组、指针、甚至是其它结构体 五.结构体变量的定义和初始化 有了结构体类型,如何定义变量 ---- ---- 六.结构体成员访问...6.1结构体变量访问成员 结构变量的成员是通过点操作符(.)访问的 点操作符接受两个操作数。...---- 6.2结构体指针访问指向变量的成员(箭头操作符 ->) 有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针。...如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销过大,所以会导致性能的下降。 结论:结构体传参的时候,要传结构体的地址。

    13420

    C语言结构

    大家好,我是泽奀,本篇博客就带大家来(初始)C语言结构体的内容,后面也会发布一篇进阶的内容。...目录 结构体基础: typedef作用: 结构体的作用: 结构体的大小内存对齐: 结构体成员的类型  结构体成员  结构体(套娃‘doge’) 结构体传参和传值  1.传参  2.传址 各位,这两个函数如果要选择一个的话...typedef作用: 想了想,还是把typedef单独拿出来说一说吧 C 语言提供了 typedef 关键字,你可以使用它来为类型取一个新的名字。...看到这里可能有些人会感觉和#deifne怎么感觉一样,那在这里我说下: #define 是 C 指令,用于为各种数据类型定义别名, typedef 类似,但是它们有以下几点不同: typedef 仅限于为类型定义符号名称...结构体的大小内存对齐: 结构体的大小不是结构体元素单纯相加就行的,因为我们现在主流的计算机使用的都是 32Bit 字长的 CPU,对这类型的 CPU 取 4 个字节的数要比取一个字节要高效,也更方便。

    2.2K20

    C语言结构

    ,如果没有对结构体进行重命名的话,仅能使用一次 struct { int a; char b; float c; }x; 形如上面代码的结构体未重命名的话,使用这一次便被回收 4...1、对齐规则 ①结构体的第一个成员对齐到结构体变量起始位置的地址 ②其他成员变量要对齐到对齐数的整数倍的地址处 对齐数:编译器默认的对齐数该成员变量大小的较小值(我所使用的vs2022默认对齐数为...4个字节放入 char c2;//1字节,<8,放在8位置处 }; 又因为现在指向9位置处,9不是最大对齐数4的整数倍,所以要指向12处,所以结构体S1的大小为12字节 printf打印一下:...,对齐的内存只需要一次访问,而不对齐的内存需要两次访问 结构体的内存对齐是拿空间来换取时间 我们可以将占用内存小的尽量集中在一起来节省空间 struct S1 { char c1; int i;...62 03 04 00,上述分析相符 跟结构体相比,位段可以达到同样的效果,并且可以很好的节省空间,缺点是有跨平台的问题存在 因为地址的分配是以字节为单位的,位段下的某些数据是没有地址的,所以位段数据不能用指针来访问

    7310
    领券