解析结构体和位段
2017-07-24 12:47
330 查看
在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类型。其次,在成员名的后面是一个冒号和一个整数,这个整数指定该位段的所占用的位的数目。
下面举例具体说明:
值得重视的是位段不跨平台,不存在对齐
相关文章推荐
- 解析C语言结构体,位段
- 解析c语言结构体和位段
- 解析C语言结构体、位段
- 解析C语言结构体,位段。
- 解析C语言结构体,位段
- C语言结构体中位域(位段)的使用
- 结构体的定义和使用和位段的使用
- 结构体_位段
- 结构体之offsetof宏详细解析
- 详细解析sizeof和结构体对齐
- ios深度解析之Swift(结构体和类,属性)
- C结构体之位域(位段)
- Linux 字符设备驱动结构(一)—— cdev 结构体、设备号相关知识解析
- 关于结构体操作的问题解析
- 在C语言中各种数据类型各占多少位 C语言 中结构体的位域(位段)
- 2.6版Linux内核中涉及的结构体指定初始化项目解析
- 结构体、位段和联合
- 结构体 - 位段
- file_operations 结构体解析
- C结构体之位域(位段)