正文 第45章 結構體與共用體7(1 / 3)

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)就對了。

[例1111]分析下麵程序的運行結果。

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;