UID 418
精华
积分 3994
威望 点
宅币 个
贡献 次
宅之契约 份
最后登录 1970-1-1
在线时间 小时
当我用了将近2年C的时候,还是分不清楚什么是联合体(union)。
根据教科书上笼统的解释:结构体和联合体之间最主要的区别就是:结构体的大小是结构体内各个元素大小的总和,而联合体的大小是联合体内体积最大的那个变量的大小。
随着对C语言理解的深入,我用一句话解释结构体与联合体。
如果存在结构体和一个联合体如下:
typedef struct MENU_AlcoholPlate
{
double Martini;
char Vodka;
int Champagne;
} AlcoholPlate;
typedef union MENU_CupOfAlcohol
{
double Martini;
char Vodka;
int Champagne;
} CupOfAlcohol;
结构体就是三个杯子一盘酒,而联合体:一个杯子三种酒。
结构体是一个服务员的餐盘,这个盘子内放着这家饭店的招牌酒水套餐,那就是:
一杯马提尼鸡尾酒
一杯伏特加
一杯香槟
当然,鸡尾酒由倒圆锥型的大高脚杯盛放,中间是一片墨绿色的橄榄叶。
伏特加呢不宜大口豪饮,则已圆柱形的小杯盛放。
椭圆形高脚杯不大不小,内乘上等香槟。
既然是套餐,那就三种酒非点不可,本店不单卖哟!
联合体就是牛场边木质棚屋内一个酒保手中普通的玻璃杯,偌大一个杯子,客官,请问您要点哪一种酒?
半品脱的伏特加?一品脱香槟?或是两品脱的马提尼?容量不等价位相同,本店薄利,就这一个杯子噢!
(如果您的左轮走火,打坏了杯子,可要照价赔偿)
int main()
{
double Martini = 43605.0213 ;
char Vodka = 255 ;
int Champagne = 0xAA55 ;
AlcoholPlate ComboOne;
CupOfAlcohol ANiceGlassCup;
ComboOne.Martini = Martini; // Ok!
ComboOne.Vodka = Vodka; // No problem!
ComboOne.Champagne = Champagne; // Fantastic!
ANiceGlassCup. Martini = Martini; // Bravo!
if (ANiceGlassCup.Vodka == 'C' ) // No! You can't do this! Because Martini has already in the cup!
return 1 ;
while (IMNotDunkYet)
{
DrinkingInTheHotel (AlcoholPlate);
DrinkingInABar (ANiceGlassCup);
}
return 0 ;
}
好了如果你理解上述内容,那么让我们干了这杯马提尼,吞下这烈火一般的伏特加,最后举起手中的香槟,今夜不醉不休!