1.共用體變量中成員的引用
和結構體變量相似,共用體變量中的成員也是通過“->”和“.”兩種運算符來引用,具體引用方式有以下三種:
(1)共用體變量名.成員名
(2)共用體指針變量名->成員名
(3)(*共用體指針變量名).成員名
如:uniondataa,*p;
p=&a;
對a中i成員的引用可以是a.i、p->i或(*p).i。
注意:在輸入輸出函數中不能直接對共用體變量進行輸入或輸出,隻能對其成員進行輸入和輸出操作。
如:
union
{
inti;
charc[2];
floatf;
}b;
scanf("%d%s%f",&b);
程序在編譯時不會報錯,但運行結果會出錯。將scanf("%d%s%f",&b)改為scanf("%d",&b.i)就對了。
[例1111]分析下麵程序的運行結果。
voidmain()
{
unionu
{
inta;
charb;
}u1;
structs
{
inta;
charb;
}s1;
u1.a=10;u1.b=A;
s1.a=10;s1.b=A;
printf("sizeofu1:%d,sizeofs1:%d\n",sizeof(u1),sizeof(s1));
printf("u1.a:%d,u1.b:%c\n",u1.a,u1.b);
printf("s1.a:%d,s1.b:%c\n",s1.a,s1.b);
}
運行結果為:
sizeofu1:2,sizeofs1:3
u1.a:65,u1.b:A
s1.a:10,s1.b:A
從上麵的運行結果可以看出,對共用體變量成員的賦值,保存的是最後的賦值,前麵對其他成員的賦值均被覆蓋,由於結構體變量的每個成員擁有不同的存儲單元,因而不會出現這種情況。
有時我們會遇到這種情況,即一個變量其取值的個數是有限的,如人的性別隻有男和女兩種、一個星期隻有7天、一年隻有12個月等。對於這些類型的數據,C語言可以把其每一個可能的取值依次列舉出來,這種方法稱為枚舉法。用這種方法定義的數據類型稱為枚舉類型。
枚舉類型的定義形式為:
enum枚舉類型名{枚舉元素取值表};
如:enumweekdays{sun,mon,tue,wed,thu,fri,sat};
定義好的枚舉類型可以用來定義枚舉變量,如:
enumweekdaysworkday;
則workday的取值範圍隻能是sun到sat,如workday=wed。
也可以在定義枚舉類型的同時直接定義枚舉變量,如:
enumweekdays{sun,mon,tue,wed,thu,fri,sat}weekend;