多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

中國最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2

c教程

C 共用體

閱讀 (2461)

C 共用體

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

定義共用體

為了定義共用體,您必須使用 union 語句,方式與定義結構類似。union 語句定義了一個新的數據類型,帶有多個成員。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;  

現在,Data 類型的變量可以存儲一個整數、一個浮點數,或者一個字符串。這意味著一個變量(相同的內存位置)可以存儲多個多種類型的數據。您可以根據需要在一個共用體內使用任何內置的或者用戶自定義的數據類型。

共用體占用的內存應足夠存儲共用體中最大的成員。例如,在上面的實例中,Data 將占用 20 個字節的內存空間,因為在各個成員中,字符串所占用的空間是最大的。下面的實例將顯示上面的共用體占用的總內存大小:

#include <stdio.h>
#include <string.h>
 
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;
}

當上面的代碼被編譯和執行時,它會產生下列結果:

Memory size occupied by data : 20

訪問共用體成員

為了訪問共用體的成員,我們使用成員訪問運算符(.)。成員訪問運算符是共用體變量名稱和我們要訪問的共用體成員之間的一個句號。您可以使用 union 關鍵字來定義共用體類型的變量。下面的實例演示了共用體的用法:

#include <stdio.h>
#include <string.h>
 
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;
}

當上面的代碼被編譯和執行時,它會產生下列結果:

data.i : 1917853763
data.f : 4122360580327794860452759994368.000000
data.str : C Programming

在這里,我們可以看到共用體的 if 成員的值有損壞,因為最后賦給變量的值占用了內存位置,這也是 str 成員能夠完好輸出的原因。現在讓我們再來看一個相同的實例,這次我們在同一時間只使用一個變量,這也演示了使用共用體的主要目的:

#include <stdio.h>
#include <string.h>
 
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;
}

當上面的代碼被編譯和執行時,它會產生下列結果:

data.i : 10
data.f : 220.500000
data.str : C Programming

在這里,所有的成員都能完好輸出,因為同一時間只用到一個成員。

關閉
程序員人生
主站蜘蛛池模板: www在线视频 | 国产精品欧美一区二区 | www.日本xxxx | 另类天堂网 | 日本高清一道本 | 亚洲第一区二区快射影院 | 国产在线视频国产永久视频 | 国产高清在线精品二区一 | 亚洲日本韩国在线 | 欧美人与牲动交xxxx | 国产精品免费一区二区三区四区 | 亚洲第一页在线播放 | 欧美18性精品| 国产日产欧产麻豆精品精品推荐 | 国产v国产v片大片线观看网站 | 亚洲福利片 | 在线观看一区二区三区四区 | 国产成人精品福利网站在线 | 亚洲国产精久久久久久久春色 | 免费在线观看www | 正在播放国产一区 | 国产高清在线播放免费观看 | 69av免费观看 | 国产香蕉97碰碰久久人人 | 97精品一区二区三区在线不卡 | 欧美一级久久久久久久大 | 亚洲无限乱码一二三四区 | 午夜免费 | 一级在线 | 欧洲 | 亚洲伊人成综合成人网 | 午夜色综合 | 亚洲福利一区二区 | 日本一本在线 | 日本高清免费网站zzzzzzzz | 亚洲一区国产 | 日韩精品一 | 欧美最猛黑人xxxx | 欧美变态暴力交videos | 中文字幕在线观看国产 | www.日本高清 | 伊人免费|