解析结构体和位段
来源:互联网 发布:淘宝宜家代购是真的吗 编辑:程序博客网 时间:2024/05/24 06:09
在C语言中,结构体是一种比较重要的结构,因此,对所学结构体只是做一总结和整理。 C语言提供了两种数据类型,数组和结构,今天,就简单的整理一下结构相关的。
1.结构体的定义
必须先定义后使用:如
2.结构成员的访问
1)直接访问:通过点操作符(.)访问的。
点操作符接受两个操作数,左操作数为结构体的名字,右操作数就是需要访问的成员的名字
如:Stu.name 则访问的是结构体为Stu的成员name。
2)间接访问:就是使用指针来访问一个结构体的成员,前提是有一个指向结构的指针。
即使用->操作符(也叫教头操作符),和点操作符一样,它接受两个操作数,不同的是它的左操作数必须是一个指向结构体的指针。
如:p->sex; p->name;
3.不完全申明
不完全申明适用于一些相互之间存在依赖或者互相引用的结构,即一个结构之中包了含另一个结构的一个或多个成员。
例如:
struct B;struct A{int_a;struct B*_pb;};struct B{int_b;struct A*_pa;};
4.结构体初始化
结构的初始化和数组的初始化很类似,如:
struct A{int a;char arr[20];double s;};int main(){struct A sa = { 10, "abcdef", 3.14 };printf("%1f %1f", sa.a, sa.s);}5.结构的存储分配
1)结构的第一个成员永远放在0偏移处
2)从第二个成员开始,都要对齐到某个对齐数的整数倍处。(对齐数:为结构成员自身大小和默认对齐数的较小值。 在VS--8 Linux--4)
3)结构的总大小必须是最大对齐数的整数倍。
例:在windows的状态下:
内存对齐的原因:
1)平台原因(移植原因) 1> 不是所有的硬件平台都能访问任意地址上的任意数据的; 2> 某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。 2)性能原因: 1> 数据结构(尤其是栈)应该尽可能地在自然边界上对齐。 2> 原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访
6.结构实现位段,位段大小的计算
位段的申明和结构类似,但他的成员是一个或多个位的字段。
位段成员必须申明为int,unsigned int或signed int类型。其次,在成员名的后面是一个冒号和一个整数,这个整数指定该位段的所占用的位的数目。
下面举例具体说明:
值得重视的是位段不跨平台,不存在对齐
阅读全文
0 0
- 解析结构体和位段
- 解析c语言结构体和位段
- 解析C语言结构体,位段
- 解析C语言结构体,位段。
- 解析C语言结构体,位段
- 解析C语言结构体、位段
- 解析C语言结构体,位段
- 解析C语言结构体,位段
- 解析C语言结构体及位段
- 结构体_位段
- 结构体中的位段
- 结构体及位段
- 结构体及位段
- AD补码数据和位段结构体
- 结构体的内存对齐和位段
- 结构体和位段的大小计算
- 自定义类型(结构体、位段、枚举和联合)
- 第五篇 结构体、位段和联合
- HDU 5972 Regular Number Bitset (字符串匹配shift and/or)
- XYNU OJ 1110—1121基础题(适合于C语言初学者)
- java集合WeakHashMap测试
- 精确探测时间
- Java对象克隆详解
- 解析结构体和位段
- [学习笔记] 点分治学习笔记
- 深度学习(Deep Learning) 学习笔记整理系列- 八
- 程序员,为什么写不好一份简历?
- 网络爬虫工作原理详解
- 指定环境变量
- 4.odoo入门——培训签到课程项目(二),后端逻辑
- spring学习之---spring的AOP
- 算法铺子之排序---插入排序