新聞中心
共用體是一種特殊的數(shù)據(jù)類型,允許您在相同的內(nèi)存位置存儲不同的數(shù)據(jù)類型。您可以定義一個帶有多成員的共用體,但是任何時候只能有一個成員帶有值。共用體提供了一種使用相同的內(nèi)存位置的有效方式。

在豐南等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站建設(shè)、成都做網(wǎng)站 網(wǎng)站設(shè)計制作按需網(wǎng)站設(shè)計,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),全網(wǎng)整合營銷推廣,外貿(mào)網(wǎng)站制作,豐南網(wǎng)站建設(shè)費用合理。
定義共用體
為了定義共用體,您必須使用 union 語句,方式與定義結(jié)構(gòu)類似。union 語句定義了一個新的數(shù)據(jù)類型,帶有多個成員。union 語句的格式如下:
union [union tag]
{
member definition;
member definition;
...
member definition;
} [one or more union variables];
union tag 是可選的,每個 member definition 是標準的變量定義,比如 int i; 或者 float f; 或者其他有效的變量定義。在共用體定義的末尾,最后一個分號之前,您可以指定一個或多個共用體變量,這是可選的。下面定義一個名為 Data 的共用體類型,有三個成員 i、f 和 str:
union Data
{
int i;
float f;
char str[20];
} data;
現(xiàn)在,Data 類型的變量可以存儲一個整數(shù)、一個浮點數(shù),或者一個字符串。這意味著一個變量(相同的內(nèi)存位置)可以存儲多個多種類型的數(shù)據(jù)。您可以根據(jù)需要在一個共用體內(nèi)使用任何內(nèi)置的或者用戶自定義的數(shù)據(jù)類型。
共用體占用的內(nèi)存應(yīng)足夠存儲共用體中最大的成員。例如,在上面的實例中,Data 將占用 20 個字節(jié)的內(nèi)存空間,因為在各個成員中,字符串所占用的空間是最大的。下面的實例將顯示上面的共用體占用的總內(nèi)存大?。?/p>
#include
#include
union Data
{
int i;
float f;
char str[20];
};
int main( )
{
union Data data;
printf( "Memory size occupied by data : %d\n", sizeof(data));
return 0;
}
嘗試一下
當上面的代碼被編譯和執(zhí)行時,它會產(chǎn)生下列結(jié)果:
Memory size occupied by data : 20
訪問共用體成員
為了訪問共用體的成員,我們使用成員訪問運算符(.)。成員訪問運算符是共用體變量名稱和我們要訪問的共用體成員之間的一個句號。您可以使用 union 關(guān)鍵字來定義共用體類型的變量。下面的實例演示了共用體的用法:
#include
#include
union Data
{
int i;
float f;
char str[20];
};
int main( )
{
union Data data;
data.i = 10;
data.f = 220.5;
strcpy( data.str, "C Programming");
printf( "data.i : %d\n", data.i);
printf( "data.f : %f\n", data.f);
printf( "data.str : %s\n", data.str);
return 0;
}
嘗試一下
當上面的代碼被編譯和執(zhí)行時,它會產(chǎn)生下列結(jié)果:
data.i : 1917853763 data.f : 4122360580327794860452759994368.000000 data.str : C Programming
在這里,我們可以看到共用體的 i 和 f 成員的值有損壞,因為最后賦給變量的值占用了內(nèi)存位置,這也是 str 成員能夠完好輸出的原因。現(xiàn)在讓我們再來看一個相同的實例,這次我們在同一時間只使用一個變量,這也演示了使用共用體的主要目的:
#include
#include
union Data
{
int i;
float f;
char str[20];
};
int main( )
{
union Data data;
data.i = 10;
printf( "data.i : %d\n", data.i);
data.f = 220.5;
printf( "data.f : %f\n", data.f);
strcpy( data.str, "C Programming");
printf( "data.str : %s\n", data.str);
return 0;
}
嘗試一下
當上面的代碼被編譯和執(zhí)行時,它會產(chǎn)生下列結(jié)果:
data.i : 10 data.f : 220.500000 data.str : C Programming
在這里,所有的成員都能完好輸出,因為同一時間只用到一個成員。
當前文章:創(chuàng)新互聯(lián)C語言教程:C語言共用體
鏈接URL:http://www.5511xx.com/article/cdheepg.html


咨詢
建站咨詢
