在c語言中,共用體一般有什麼作用

時間 2022-05-03 23:10:44

1樓:google也知道

所謂共用體型別是指將不同的資料項組織成乙個整體,它們在記憶體中占用同一段儲存單元。其定義形式為:

union 共用體名

;union data

obj;

該形式定義了乙個共用體資料型別union data ,定義了共用體資料型別變數obj。共用體資料型別與結構體在形式上非常相似,但其表示的含義及儲存是完全不同的。先讓我們看乙個小例子。

union data /*共用體*/

mm;struct stud /*結構體* /

;main( )

執行程式輸出:

15,8

程式的輸出說明結構體型別所佔的記憶體空間為其各成員所佔儲存空間之和。而形同結構體的共用體型別實際占用儲存空間為其最長的成員所佔的儲存空間。

對共用體的成員的引用與結構體成員的引用相同。但由於共用體各成員共用同一段記憶體空間,使用時,根據需要使用其中的某乙個成員。從圖中特別說明了共用體的特點,方便程式設計人員在同一記憶體區對不同資料型別的交替使用,增加靈活性,節省記憶體。

可以引用共用體變數的成員,其用法與結構體完全相同。若定義共用體型別為:

union data /*共用體*/

mm;其成員引用為:mm.a,mm.b,mm.c,mm.d 但是要注意的是,不能同時引用四個成員,在某一時刻,只能使用其中之一的成員。

main( )

mm;mm.a=6;

printf("%d\n",mm.a);

mm.c=67.2;

printf("%5.1lf\n", mm.c);

mm.d='w';

mm.b=34.2;

printf("%5.1f,%c\n",mm.b,mm.d);

}執行程式輸出為:

66 7.2

3 4.2,=

程式最後一行的輸出是我們無法預料的。其原因是連續做mm.d='w';mm.

b=34.2;兩個連續的賦值語句最終使共用體變數的成員mm.b所佔四位元組被寫入34.

2,而寫入的字元被覆蓋了,輸出的字元變成了符號「 =」。事實上,字元的輸出是無法得知的,由寫入記憶體的資料決定。

例子雖然很簡單,但卻說明了共用體變數的正確用法。

2樓:韋雨壬邃

共用體是c語言中的一種資料型別,是指將不同型別的資料項存放於同一段記憶體單元的一種構造資料型別。

定義乙個共用體型別的一般形式為:

union

共用體型別名

;通訊中的資料報會用到共用體。

因為不知道對方會發乙個什麼包過來,用共用體的話就很簡單了,定義幾種格式的包,收到包之後就可以直接根據包的格式取出資料。

在c語言中,共用體一般有什麼作用?

3樓:四捨**入

共用體一般指聯合體,作用如下:

1、節省記憶體

有兩個很長的資料結構,不會同時使用,用結構體的話,只占用最長的那個資料結構所占用的空間,就足夠了。

2、做某些轉換用

union;

x=20.8;

4樓:

1)節省記憶體,有兩個很長的資料結構,不會同時使用,比如乙個表示老師,乙個表示學生,如果要統計教師和學生的情況用結構體的話就有點浪費了!用結構體的話,只占用最長的那個資料結構所占用的空間,就足夠了!

2)做某些轉換用

union;

x=20.8;

cout<

這下我們和道了double 型別資料的16進製制編碼了;

3)假設你有乙個應用需要大量臨時變數,這些變數型別不同,而且隨時會更換而你的堆疊空間有限不能同時分配那麼多變數,做個共用體讓這些變數占用同一空間,那麼就可以節省堆疊空間,由於這些只是臨時變數,用完就丟,和暫存器差不多不用維護,所以不會有衝突!

5樓:匿名使用者

公用體就是乙個結構,不過它的所有成員相對於基位址的偏移量都為0,也就是說,空間要大到能容納最寬的成員。

而且只能用其第乙個成員型別的值進行初始化

6樓:天雲小店

共用體是c語言中的一種資料型別,是指將不同型別的資料項存放於同一段記憶體單元的一種構造資料型別。

定義乙個共用體型別的一般形式為:

union 共用體型別名

;通訊中的資料報會用到共用體。

因為不知道對方會發乙個什麼包過來,用共用體的話就很簡單了,定義幾種格式的包,收到包之後就可以直接根據包的格式取出資料。

7樓:匿名使用者

通訊中的資料報會用到,因為你不知道對方會發乙個什麼包給你,用共用體的話就很簡單了,定義幾種格式的包,收到包過後就可以直接根據包的格式拿出資料。

8樓:來自太陽de外星人

所謂共用體型別是指將不同的資料項組織成乙個整體,它們在記憶體中占用同一段儲存單 元。其定義形式為:

union 共用體名 ;

共用體的定義

union data obj;

該形式定義了乙個共用體資料型別union data ,定義了共用體資料型別變數o b j。共用體

c語言中的共用體是什麼?

9樓:google也知道

所謂共用體型別是指將不同的資料項組織成乙個整體,它們在記憶體中占用同一段儲存單元。其定義形式為:

union 共用體名

;union data

obj;

該形式定義了乙個共用體資料型別union data ,定義了共用體資料型別變數obj。共用體資料型別與結構體在形式上非常相似,但其表示的含義及儲存是完全不同的。先讓我們看乙個小例子。

union data /*共用體*/

mm;struct stud /*結構體* /

;main( )

執行程式輸出:

15,8

程式的輸出說明結構體型別所佔的記憶體空間為其各成員所佔儲存空間之和。而形同結構體的共用體型別實際占用儲存空間為其最長的成員所佔的儲存空間。

對共用體的成員的引用與結構體成員的引用相同。但由於共用體各成員共用同一段記憶體空間,使用時,根據需要使用其中的某乙個成員。從圖中特別說明了共用體的特點,方便程式設計人員在同一記憶體區對不同資料型別的交替使用,增加靈活性,節省記憶體。

可以引用共用體變數的成員,其用法與結構體完全相同。若定義共用體型別為:

union data /*共用體*/

mm;其成員引用為:mm.a,mm.b,mm.c,mm.d 但是要注意的是,不能同時引用四個成員,在某一時刻,只能使用其中之一的成員。

main( )

mm;mm.a=6;

printf("%d\n",mm.a);

mm.c=67.2;

printf("%5.1lf\n", mm.c);

mm.d='w';

mm.b=34.2;

printf("%5.1f,%c\n",mm.b,mm.d);

}執行程式輸出為:

66 7.2

3 4.2,=

程式最後一行的輸出是我們無法預料的。其原因是連續做mm.d='w';mm.

b=34.2;兩個連續的賦值語句最終使共用體變數的成員mm.b所佔四位元組被寫入34.

2,而寫入的字元被覆蓋了,輸出的字元變成了符號「 =」。事實上,字元的輸出是無法得知的,由寫入記憶體的資料決定。

例子雖然很簡單,但卻說明了共用體變數的正確用法。

結構體和共用體在c語言中是怎麼用的

10樓:螞蟻飛行記

結構體和共用體其實都是用來描述一組由不同型別變數的集合,也就是說結構體和共用體中都可以同時存在int型、char型、float型等等!!

但是不同的是,結構體內所定義的每乙個變數都有其自己獨立的儲存空間,互不干涉,比如乙個結構體中有乙個int型、同時有乙個char型,那麼它們是獨立的,總共占用三個位元組空間。

而共用體內定義的每乙個變數都共同享有同乙個儲存空間,儲存空間的大小是占用空間最大的那個一變數的大小。比如,我還是在裡面有乙個int型和乙個char型,那這個共用體就佔int型的2個位元組,加入我用共用體存入乙個char型資料,我可以用int型來讀取,讀的是二進位制資料。

呵呵呵呵,c語言是很久以前學的了,不知道這點記憶對不對,但是希望能幫得到你。

11樓:

共用體用得很少,結構體用得較多

在c語言裡面,共用體和結構體的區別是什麼?

12樓:阿俠

首先你說的很對 共同體的確佔的記憶體要比結構體小結構體占用的記憶體空間內,是其元素,佔空間的總和容,而共用體是,元素中占用空間最大的元素的空間!所以共用體在空間開銷上要小一點!

但是既然是兩個不同的概念當然是不一樣的 要不就沒必要定義兩個名詞了其實在共用體所用的記憶體中已經寫入了資料!當使用其它元素時!上次使用的內容將被覆蓋. 也就是說他使幾個不同型別的變數共佔一段記憶體(相互覆蓋),每次只有乙個能使用

結構體則不然, 每個成員都會有儲存空間的,可以一起用.內部變數間是相互獨立的,c中的結構體和c++裡的類很相像~~

c語言中的共用體是什麼?

13樓:四捨**入

共用體一般指聯合體,作用如下:

1、節省記憶體

有兩個很長的資料結構,不會同時使用,用結構體的話,只占用最長的那個資料結構所占用的空間,就足夠了。

2、做某些轉換用

union;

x=20.8;

14樓:楊塵一

在進行某些演算法的c語言程式設計的時候,需要使幾種不同型別的變數存放到同一段記憶體單元中。也就是使用覆蓋技術,幾個變數互相覆蓋。這種幾個不同的變數共同占用一段記憶體的結構,在c語言中,被稱作「共用體」型別結構,簡稱共用體。

注:在某些書籍中可能稱之為「聯合體」,但是「共用體」更能反映該型別在記憶體的特點。

共用體型別資料的特點

1.同乙個記憶體段可以用來存放幾種不同型別的成員,但是在每一瞬間只能存放其中的一種,而不是同時存放幾種。換句話說,每一瞬間只有乙個成員起作用,其他的成員不起作用,即不是同時都在存在和起作用。

2.共用體變數中起作用的成員是最後一次存放的成員,在存入乙個新成員後,原有成員就失去作用。

3.共用體變數的位址和它的各成員的位址都是同一位址。

4.不能對共用體變數名賦值,也不能企圖引用變數名來得到乙個值。

5.共用體型別可以出現在結構體型別的定義中,也可以定義共用體陣列。反之,結構體也可以出現在共用體型別的定義中,陣列也可以作為共用體的成員。

15樓:google也知道

所謂共用體型別是指將不同的資料項組織成乙個整體,它們在記憶體中占用同一段儲存單元。其定義形式為:

union 共用體名

;union data

obj;

該形式定義了乙個共用體資料型別union data ,定義了共用體資料型別變數obj。共用體資料型別與結構體在形式上非常相似,但其表示的含義及儲存是完全不同的。先讓我們看乙個小例子。

union data /*共用體*/

mm;struct stud /*結構體* /

;main( )

執行程式輸出:

15,8

程式的輸出說明結構體型別所佔的記憶體空間為其各成員所佔儲存空間之和。而形同結構體的共用體型別實際占用儲存空間為其最長的成員所佔的儲存空間。

對共用體的成員的引用與結構體成員的引用相同。但由於共用體各成員共用同一段記憶體空間,使用時,根據需要使用其中的某乙個成員。從圖中特別說明了共用體的特點,方便程式設計人員在同一記憶體區對不同資料型別的交替使用,增加靈活性,節省記憶體。

可以引用共用體變數的成員,其用法與結構體完全相同。若定義共用體型別為:

union data /*共用體*/

mm;其成員引用為:mm.a,mm.b,mm.c,mm.d 但是要注意的是,不能同時引用四個成員,在某一時刻,只能使用其中之一的成員。

main( )

mm;mm.a=6;

printf("%d\n",mm.a);

mm.c=67.2;

printf("%5.1lf\n", mm.c);

mm.d='w';

mm.b=34.2;

printf("%5.1f,%c\n",mm.b,mm.d);

}執行程式輸出為:

66 7.2

3 4.2,=

程式最後一行的輸出是我們無法預料的。其原因是連續做mm.d='w';mm.

b=34.2;兩個連續的賦值語句最終使共用體變數的成員mm.b所佔四位元組被寫入34.

2,而寫入的字元被覆蓋了,輸出的字元變成了符號「 =」。事實上,字元的輸出是無法得知的,由寫入記憶體的資料決定。

例子雖然很簡單,但卻說明了共用體變數的正確用法。

在C語言中fseek 的功能,在C語言中fseek 的功能

fseek 是重定位流 資料流 檔案 上的檔案內部位置指標。注意 檔案指標指向檔案 流。位置指標指向檔案內部的位元組位置,隨著檔案的讀取會移動,檔案指標如果不重新賦值將不會改變或指向別的檔案。如果執行成功,stream將指向以fromwhere為基準,偏移offset 指標偏移量 個位元組的位置,函...

C語言中的sturct用途, 在c語言中的意思

結構體。c為了更好的處理資料問題,引入了結構體的概念。具體用法你可以到網上搜下。我不廢話了。這是用來定義結構的函式 例如 struct student 在c語言中的意思 階乘指從1乘以2乘以3乘以4一直乘到所要求的數。例如所要求的數是4,則階乘式是1 2 3 4,得到的積是24,24就是4的階乘。例...

在c語言中3c是什麼意思, 在c語言中什麼意思

是c語言中的格式字元,c代表了輸出字元型別,3代表了佔位情況,3c的意思是輸出乙個佔位3的字元。式樣化規定字元,以 開端,後跟乙個或幾個規定字元,用來確定輸出內容式樣。擴充套件資料 d 十進位制有符號整數 u 十進位制無符號整數 f 浮點數 s 字串 c 單個字元 p 指標的值 e 指數形式的浮點數...

小白在c語言中一些基礎問題,小白在C語言中一些基礎問題

巨集定義是不需要分號的 define link struct link define len sizeof link int create int n 返回型別不正確,應該是link create int n c語言程式設計小白問題 首先訂正乙個錯誤,c語言可以寫像vb一樣的介面的,如果在windo...

在c語言中《是什麼意思,在C語言中 是什麼意思

先說左移,左移就是把乙個數的所有位都向左移動若干位,在c中用 運算子.例如 int i 1 i i 2 把i裡的值左移2位 也就是說,1的2進製是000.0001 這裡1前面0的個數和int的位數有關,32位機器,gcc裡有31個0 左移2位之後變成000.0100,也就是10進製的4,所以說左移1...