C語言 共用體的特點
通過上述例題,可以看出:
(1)共用體通過內(nèi)存覆蓋技術(shù),實現(xiàn)共用體變量各成員的內(nèi)存共享,所以在某一時刻,共用體變量的內(nèi)存地址中存放的、起作用的是最后一次存入的成員值。
(2)由于所有成員共享同一內(nèi)存空間,故共用體變量與其各成員的地址相同。例如,&u1=&n1.a=&u1.b=&u1.c。
(3)不能對共用體變量進(jìn)行初始化,也不能將共用體變量作為函數(shù)參數(shù),以及不能使函數(shù)返回一個共用數(shù)據(jù),但可以使用指向共用體變量的指針。
(4)對于共用體中定義的不同類型的成員,在引用時需要注意不同類型的差異,如:
union un
{
int a;
float b;
};
main()
{
union un ul;
ul.a=20;
ul.b=10;
printf("%f",ul.a);
}
程序執(zhí)行結(jié)果,有的讀者可能認(rèn)為是10,但實際輸出是“0”。為什么會這樣呢?
因為共用體變量中起作用的是最后一次存入的成員值,也就是u1.b的值10,而u1.b類型為浮點型,在內(nèi)存中的存儲方式與整型是不同的,所以當(dāng)u1.b的值覆蓋了成員a時,并不能將10也賦值給成員a。
(5)共用類型可以出現(xiàn)在結(jié)構(gòu)類型定義中,同樣,結(jié)構(gòu)體類型定義中也可以出現(xiàn)共用體類型。
點擊加載更多評論>>