7.2 共用型和共用型變量
1.共用型
在某些特殊應(yīng)用中,要求某數(shù)據(jù)對(duì)象在程序執(zhí)行的不同時(shí)期能存儲(chǔ)不同類(lèi)型的值。C語(yǔ)言的共用型能滿足這個(gè)要求。共用型的成員從同一地址開(kāi)始存儲(chǔ)。但任一時(shí)刻只存儲(chǔ)其中一個(gè)成員,由最近放入的內(nèi)容決定該區(qū)域究竟是哪一個(gè)成員的值。分配給共用型的存儲(chǔ)區(qū)域大小,要求至少能存儲(chǔ)其中最大一種成員。定義共用型的一般形式為
union 共用型名 {
數(shù)據(jù)類(lèi)型1 成員1名;
數(shù)據(jù)類(lèi)型2 成員2名;
……
數(shù)據(jù)類(lèi)型n 成員n名;
};
例如,下面定義的共用型(union udata) 能存儲(chǔ)整型,或字符型,或浮點(diǎn)型的數(shù)據(jù):
union udata {
int ival;
char chval;
float fval;
};
2.共用型變目的定義
與結(jié)構(gòu)變量的定義方法一樣,共用型變量的定義方法有以下幾種:
(1) 先定義共用型,然后定義共用型變量、共用型數(shù)組、共用型指針等。
(2) 定義共用型同時(shí)定義共用型變量、共用型數(shù)組、共用型指針等。
(3) 定義無(wú)名共用型同時(shí)定義共用型變量、共用型數(shù)組、共用型指針等。
3.共用型變目初始化
共用型變量定義時(shí),也可初始化,但只能對(duì)共用型中的第一個(gè)成員初始化。
4.引用共用型變目的成員
引用共用型變量成員的方法與引用結(jié)構(gòu)變量成員的方法相同。共用型也可出現(xiàn)在結(jié)構(gòu)和數(shù)組中,共用型也可包含有結(jié)構(gòu)和數(shù)組。引用結(jié)構(gòu)中的共用型或共用型中的結(jié)構(gòu)的書(shū)寫(xiě)形式與引用嵌套結(jié)構(gòu)成員的書(shū)寫(xiě)形式一樣。例如,以下代碼
Struct {
char name[30]; /* 標(biāo)識(shí)符 */
int uflag; /* 存于共用型成員中的值的類(lèi)型 */
union /* 存儲(chǔ)變量值 */
{ int ival; /* 當(dāng)變量為整型時(shí) */
char chval /* 當(dāng)變量為字符型時(shí) */
float fval; /*當(dāng)變量為浮點(diǎn)型時(shí) */
} uval;
} symTbl[1000]; /* 變量表 */
定義了一個(gè)結(jié)構(gòu)數(shù)組symTbl。用symTbl[50].uval.fval引用結(jié)構(gòu)數(shù)組symTbl中的第50個(gè)結(jié)構(gòu)的共用型成員uval的fval(視其中的共用型為浮點(diǎn)型數(shù)據(jù))。
函數(shù)的形式參數(shù)不能是共用型類(lèi)型,函數(shù)的結(jié)果也不能是共用型類(lèi)型。但指向共用型的指針可以作為函數(shù)形式參數(shù),函數(shù)也可以返回指向共用型的指針。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |