C语言联合体的灵活运用

一段联合体的程序如下

 1 #include <stdio.h>
 2 typedef union {
 3 unsigned int    a32[2];
 4 unsigned short  a16[1];
 5 unsigned char   a8[1];
 6 } T_union;
 7
 8 void main()
 9 {
10     int i;
11     T_union v={0};
12     for(i=0;i<8;i++) v.a8[i]=i;
13
14     printf("占用空间:%d\n",sizeof(v));
15
16     printf("\n a8:");
17     for(i=0;i<8;i++) printf("%3.2x",v.a8[i]);
18
19     printf("\na16:");
20     for(i=0;i<4;i++) printf("%5.4x",v.a16[i]);
21
22     printf("\na32:");
23     for(i=0;i<2;i++) printf("%9.8x",v.a32[i]);
24     printf("\n");
25 }

运行结果

占用空间:8

 a8: 00 01 02 03 04 05 06 07
a16: 0100 0302 0504 0706
a32: 03020100 07060504
Press any key to continue

可见

1.联合体变量的占用空间是由联合体成员中占用空间最大的成员决定的。 这段程序中int a32[2] 占用空间最大,为8字节,所以此联合体声明的变量占用空间为8字节

2.联合体内部成员共用一段内存空间。 并遵循”高高低低“的原则。a8[0]和a8[1]组成一个a16[0] ,a8[1]相对于a8[0]为高地址,a8[1]为a16[0]的高8位。(注意:本程序中并没有定义a8[1],但是可以引用。因为a8[1]仅用来表示地址比a8[0]高1位。但是如果定义成char a8[8]会清晰)。

时间: 2024-10-13 15:56:25

C语言联合体的灵活运用的相关文章

C语言联合体(union)的使用方法及其本质-union

转载自:https://blog.csdn.net/si_zhou_qun_84342712/article/details/53187106 1.联合体union的基本特性--和struct的同与不同 union,中文名"联合体.共用体",在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量. 不过区别也挺明显: 结构体(struct)中所有变量是"共存"的--优点是"有容乃大&q

《致青春&#183;成长英语原创情景剧》的设计

一.引言 综合英语课程是一门综合英语技能课,是商务英语专业的专业基础课,它也是该专业的必修课.该基础课是学生学习和掌握本学科坚实宽广基础知识的重要基本课程,能帮助学生练好坚实的语言基本功,使他们的英语语言知识和交际实践能力能满足涉外活动中的语言要求,因此综合英语课在商务英语专业的整个课程体系中居于基础地位,同时又位居非常重要的地位.因此,通过一个学期的学习,学生最需要的是将所学的英语听说读写能力进行综合运用,达到知识和技能的融会贯通,<致青春·成长>英语原创情景剧的仿真项目能很好地培养学生英语

C语言union(联合体、共用体)及应用

C语言union(联合体.共用体)及应用 在结构体(变量)中,结构的各成员顺序排列存储,每个成员都有自己独立的存储位置.联合(union)变量的所有成员共享同片存储区/内存.因此联合变量每个时刻里只能保存它的某一个成员的值. 联合变量也可以在定义时直接初始化,但这个初始化只能对第一个成员进行.例如下面的描述定义了一个联合变量,并进行了初始化. 1 uunion data 2 { 3 char n; 4 float f; 5 }; 6 union data u1 = {3}; //只有u1.n被初

浅谈C语言中的联合体(转载)

联合体union 当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体(union).在C Programming Language 一书中对于联合体是这么描述的: 1)联合体是一个结构: 2)它的所有成员相对于基地址的偏移量都为0: 3)此结构空间要大到足够容纳最"宽"的成员: 4)其对齐方式要适合其中所有的成员: 下面解释这四条描述: 由于联合体中的所有成员是共享一段内存的,因此每个成员的存放首地址相对于于联合体变量的基地址的偏移量为0,即所有成员的首地址都是一样的.为

C语言-结构体-联合体

结构体 在Java中,我们要表示一个复合的数据类型就会使用对象去封装.而C就有结构体. 结构体是C语言中自定义的数据类型,是一组变量的集合,有别于数组,数组仅限于同一种数据类型,而结构体可以是任何数据类型,包括数组.结构体里面的每一个变量或者数组都是结构体的成员. 下面来看看结构体的基本使用 14-18行,定义了一个名称为Person的结构体,结构体里面有 age,money,sex 三种数据类型: 20-24行,是结构体的声明一个名为 P 的 Person 变量,并赋值: 25-27行,是结构

C++中的结构体,C管理进程代码,C++管理进程代码,C语言中的联合体

 1.C++中的结构体 #include<iostream> struct lstruct { int num; }; struct MyStruct { int num; double db = 10.8;//可以有默认的值 //MyStruct sx;//拒绝内部定义自己,也就是说不能够内部指向自己 MyStruct *pnext; MyStruct *phead; lstruct  l1; void boss()  //可以有方法 { } }; struct MyStructA {

[汇编与C语言关系]4. 结构体和联合体

用反汇编的方法研究一下C语言的结构体: #include <stdio.h> int main(int argc, char ** argv) { struct { char a; short b; int c; char d; } s; s.a = 1; s.b = 2; s.c = 3; s.d = 4; printf("%u\n", sizeof(s)); return 0; } main函数中几条语句的反汇编结果如下: 从访问结构体成员的指令可以看出,结构体的四个成

浅谈C语言中的联合体

联合体union 当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体(union).在C Programming Language 一书中对于联合体是这么描述的: 1)联合体是一个结构: 2)它的所有成员相对于基地址的偏移量都为0: 3)此结构空间要大到足够容纳最"宽"的成员: 4)其对齐方式要适合其中所有的成员: 下面解释这四条描述: 由于联合体中的所有成员是共享一段内存的,因此每个成员的存放首地址相对于于联合体变量的基地址的偏移量为0,即所有成员的首地址都是一样的.为

C语言:结构体和联合体(共用体)

结构体:struct 1.结构体变量的首地址能够被其最宽基本类型成员的大小所整除. 2.结构体每个成员相对于结构体首地址的偏移量(offset)都是成员的整数倍. 3.结构体的总大小为结构体最宽基本类型成员大小的整数倍. cpu的字长: 32位的cpu或64位的cpu 32位或64位指的是cpu的字长 字长实际上指得是cpu在访问内存时,一次可以读取的长度. 内存对齐(可以设置,一般是2的倍数,虽然浪费了空间,但是方便了cpu更好更快的取出数据): char  4个字节 int    4个字节