一、共用體類型的定義主慰、變量定義和使用
- 共用體union和結(jié)構(gòu)體struct在類型定義嚣州、變量定義、使用方法上很相似共螺。
- 共用體和結(jié)構(gòu)體的不同:結(jié)構(gòu)體中的成員彼此是獨(dú)立存在的该肴,分布在內(nèi)存的不同單元內(nèi),他們只是被打包成了一個(gè)整體叫做結(jié)構(gòu)體而已藐不;公用體中的各個(gè)成員其實(shí)是一體的匀哄,彼此不獨(dú)立,他們共同使用一個(gè)內(nèi)存單元雏蛮∠呀溃可以理解為:同一個(gè)內(nèi)存空間有不同的解釋方式。
- 公用體就是對(duì)同一塊內(nèi)存二進(jìn)制的不同理解方式挑秉。
- union的sizeof測(cè)到的大小實(shí)際是union中各個(gè)元素里面占內(nèi)存最大的那個(gè)元素的大小法梯。
- union不存在內(nèi)存對(duì)齊的問(wèn)題。所有元素都從同一個(gè)地址開(kāi)始衷模。
#include <stdio.h>
union myunion
{
int a;
char b; //a和b指向同一個(gè)內(nèi)存鹊汛,只是對(duì)這塊內(nèi)存空間有兩種解析方式蒲赂。
};
struct mystruct
{
int a;
char b;
};
int main(void)
{
union myunion u1;
u1.a=23;
printf("u1.b=%d.\n",u1.b); //23
printf("&u1.a=%d.\n",&u1.a);
printf("&u1.b=%d.\n",&u1.b);
printf("sizeof(union myunion)=%d.\n",sizeof(union myunion)); //4
//a和b指向同一塊內(nèi)存空間,只是對(duì)這塊內(nèi)存空間不同的解析規(guī)則
struct mystruct s1刁憋;
s1.a=23;
printf("s1.b=%d.\n",s1.b); //0
return 0;
}
二滥嘴、共用體和結(jié)構(gòu)體的相同和不同
- 相同點(diǎn):操作語(yǔ)法幾乎相同。
- 不同點(diǎn):本質(zhì)上不同至耻,struct是多個(gè)獨(dú)立元素打包在一起若皱;union是一個(gè)元素不同的解析方式。
三尘颓、共用體的主要用途
- 用在對(duì)同一個(gè)內(nèi)存單元進(jìn)行多種不同規(guī)則解析的環(huán)境走触。
- c語(yǔ)言中可以沒(méi)有共用體,用指針和強(qiáng)制類型轉(zhuǎn)換可以替代共用體的方式疤苹。但是用共用體更簡(jiǎn)單更方便互广。
#include <stdio.h>
union test
{
int a;
float b;
};
int main(void)
{
union test t1;
t1.a=11233477881;
printf("t1.b=%f.\n",t1.b);
printf("指針?lè)绞剑?%f.\n",*((float *)&a));
return 0;
}