C语言中联合体(union)的内存布局和成员访问方式有哪些独特之处?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1194个文字,预计阅读时间需要5分钟。
当多个数据需要共享内存或每次只取一个数据时,可以使用联合体(union)。在C编程语言中,对于联合体有这样的描述:
1.联合体是一个结构;
2.它的所有成员相对于基地为相对位置。
当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体(union)。在C Programming Language 一书中对于联合体是这么描述的:
1)联合体是一个结构;
2)它的所有成员相对于基地址的偏移量都为0;
3)此结构空间要大到足够容纳最"宽"的成员;
4)其对齐方式要适合其中所有的成员;
下面解释这四条描述:
由于联合体中的所有成员是共享一段内存的,因此每个成员的存放首地址相对于于联合体变量的基地址的偏移量为0,即所有成员的首地址都是一样的。为了使得所有成员能够共享一段内存,因此该空间必须足够容纳这些成员中最宽的成员。对于这句“对齐方式要适合其中所有的成员”是指其必须符合所有成员的自身对齐方式。
下面举例说明:
如联合体
union U { char s[9]; int n; double d; };
s占9字节,n占4字节,d占8字节,因此其至少需9字节的空间。
本文共计1194个文字,预计阅读时间需要5分钟。
当多个数据需要共享内存或每次只取一个数据时,可以使用联合体(union)。在C编程语言中,对于联合体有这样的描述:
1.联合体是一个结构;
2.它的所有成员相对于基地为相对位置。
当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体(union)。在C Programming Language 一书中对于联合体是这么描述的:
1)联合体是一个结构;
2)它的所有成员相对于基地址的偏移量都为0;
3)此结构空间要大到足够容纳最"宽"的成员;
4)其对齐方式要适合其中所有的成员;
下面解释这四条描述:
由于联合体中的所有成员是共享一段内存的,因此每个成员的存放首地址相对于于联合体变量的基地址的偏移量为0,即所有成员的首地址都是一样的。为了使得所有成员能够共享一段内存,因此该空间必须足够容纳这些成员中最宽的成员。对于这句“对齐方式要适合其中所有的成员”是指其必须符合所有成员的自身对齐方式。
下面举例说明:
如联合体
union U { char s[9]; int n; double d; };
s占9字节,n占4字节,d占8字节,因此其至少需9字节的空间。

