联合体(union)定义

C语言编程的时候,需要使几种不同类型的变量存放到同一段内存单元中。也就是使用覆盖技术,几个变量互相覆盖重叠。这种几个不同的变量共同占用一段内存的结构,在C语言中,被称作“共用体”类型结构,简称共用体,也叫联合体。

与结构体的定义形式类似,联合体的定义形式也分为如下几种:

union 共用体名

{

    数据类型 成员名;

    数据类型 成员名;

    ...

} 变量名;

 

union foo

{

char s[10];

int i;

}a,b;

 

 

union 共用体名

{

    数据类型 成员名;

    数据类型 成员名;

    ...

};

 

union 共用体名 变量名;

 

union foo

{

char s[10];

int i;

};

 

union foo a;

 

typedef union

{

    数据类型 成员名;

    数据类型 成员名;

...

}共用体名;

 

共用体名 变量名;

typedef union

{

char s[10];

int i;

}foo;

 

foo a;

 

与结构体定义类似,用得最多的联合体定义方式为:

typedef union _共用体名

{

    数据类型 成员名;

    数据类型 成员名;

...

}共用体名,*P共用体名;

 

共用体名 变量名;

       比如:

typedef union _foo

{

char s[10];

int i;

}foo,*pfoo;

 

foo a;

    在联合体定义与使用的时候,需要注意下面几点:

1.         union中可以定义多个成员,union的大小由最大的成员的大小决定。

2.         union成员共享同一块大小的内存,一次只能使用其中的一个成员。

3.         对某一个成员赋值,会覆盖其他成员的值,因为他们共享一块内存。

4.         union中各个成员存储的起始地址都是相对于基地址的偏移都为0

 

    下面是联合体的使用示例:

typedef union _foo

{

char s[20];

int i;

}foo,*pfoo;

 

int main(void)

{

       foo a;

 

       a.i = 100;

       printf(“a.i:%d, a.s:%s\n”, a.i, a.s);

       strcpy(a.s, “hello world!”);

       printf(“a.i:%d, a.s:%s\n”, a.i, a.s);

       printf(“&a.i:%p,&a.s%p\n”, &a.i, &a.s);

       printf(“sizeof(a)=%d\n”, sizeof(a));

    return 0;

}

周哥教IT,分享编程知识,提高编程技能,程序员的充电站。跟着周哥一起学习,每天都有进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

当你决定关注「周哥教IT」,你已然超越了90%的程序员!

IT黄埔-周哥教IT技术交流QQ群:213774841,期待您的加入!

二维码
微信扫描二维码关注