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

2022-03-05 05:04:08 字數 6155 閱讀 9843

1樓:四舍**入

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

1、節省記憶體

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

2、做某些轉換用

union;

x=20.8;

2樓:

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

2)做某些轉換用

union;

x=20.8;

cout<

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

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

3樓:匿名使用者

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

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

4樓:天雲小店

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

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

union 共用體型別名

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

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

5樓:匿名使用者

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

6樓:來自太陽de外星人

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

union 共用體名 ;

共用體的定義

union data obj;

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

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

7樓:阿俠

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

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

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

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

8樓:四舍**入

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

1、節省記憶體

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

2、做某些轉換用

union;

x=20.8;

9樓:楊塵一

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

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

共用體型別資料的特點

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

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

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

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

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

10樓: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,而寫入的字元被覆蓋了,輸出的字元變成了符號「 =」。事實上,字元的輸出是無法得知的,由寫入記憶體的資料決定。

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

11樓:淡若親風

共同體是指成員共同使用一段儲存區域,共同體佔用記憶體大小決定於所佔記憶體最大的那個成員,但是實際使用的記憶體會小於等於共同體所佔記憶體大小

12樓:

union

例如定義一個union

union s_un;

s_un s;

你可以用s.s_un_b, s.s_un_w, s_addr訪問實際上訪問的是同一塊記憶體區域,但由於資料型別不同,所以得到的結果可能不一樣。

修改其中一個資料,其他的資料都可能會改變。

union所佔的記憶體大小有最大的那個資料型別決定。

13樓:守望流逝的青春

struct ???

c語言中聯合體有什麼用??

14樓:匿名使用者

其實聯合體也沒什麼用,你只要把結構體學好就行了,大部分還是用到結構體,而且聯合體和結構體差不多。

15樓:田真久

聯合體和結構體是差不多的,不多記憶體排列不一樣,結構體中變數的起始記憶體位置不一樣,但是聯合體的變數記憶體地址都是一樣的。

16樓:尼瑪真響亮

強制型別轉換盒聯合體是不同的東西。

這麼舉個例子吧,我需要表示一個32位暫存器,我可以用一個32位整形表示,也可以用4個的位元組數字,也可以用位段,每種表達方式都有用,這時候可以把他們定義成聯合體。

c語言中的共用體

17樓:翦駿英沈懷

我測試了一下

int為32bit

,long為32位

,char為8位機測試。

分析得出這樣的結果:

這正如共用結構體中

假如他們的共用首地址為0x10000000那麼地址

變數0x10000000:

a[0]

如果執行語句

s.a[0]=0x39

0x10000004:

a[1]

相差4個位元組

那麼會產生如下變化:

0x10000000:

ba[0]=0x39

b[0]=0x39

c[0]=0x39(

字元c[0]="9")

0x10000000:

c[0]

如果再執行語句

s.a[1]=0x38

0x10000001:

c[1]

那麼會產生如下變化:

0x10000002:

c[2]

a[1]=0x38

0x10000003:

c[3]

相差1個位元組

也即是地址0x10000000到0x10000003中的資料為0x00000039

也即是地址0x10000004到0x10000007中的資料為0x00000038

雖然是共用體,但是a

bc同用了一個地址

如果對a賦值了也同時對b和c賦值

只是資料型別不同而已。

如果從地址上來分析

c如果定義的是c[8],那麼c[5]地址即為0x10000004它的值就因該為0x38,因為和a[1]的地址相同。

檢視b的是後可以直接用%d來檢視

因為在本機上也是32bit和int相同

18樓:齋霖冉柔婉

結果是770

共用體只有一個儲存空間,各共用體變數共用這一個儲存空間。在你的程式中,c變數已經使用了共用體的空間儲存了2和3,此時,共用體變數的空間狀態是:0x00000302。

然後你的程式printf("%d",x.i);以int形式輸出,那麼輸出的就是0x00000302,轉換成十進位制就是770

19樓:苑餘殷運浩

(1)陣列是順序儲存的,所以a[1]位於a[0]的後邊,a[1]相對a[0]位於高地址,int型佔兩個位元組,所以a[0]中對應的數實際上是0039,a[1]中實際上是0038.

(2)共用體的記憶體是共享的,也就是說陣列a和long型的b以及char型的c是佔用的同一段記憶體,你指定了a的值,實際上b和c的值也就有了

(3)對於一個數,總是先讀高位,後讀低位,而long

型為四個位元組的大小,也就是會把a[0]和a[1]全部讀出來,而a[1]位於

高地址區,也就先讀了。所以取b的值時,取到的就是00380039,省掉前邊的0,也就是380039。

同樣的問題,幹嘛問兩遍,呵呵,不過我這次比另一個回答更詳細一些

20樓:乾莘出佩

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

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

共用體型別資料的特點

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

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

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

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

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

C語言中的清屏有什麼作用那,C語言中清屏函式是什麼?

c語言中的清屏的作用為 清除螢幕輸出。呼叫清屏時,螢幕上的所有輸出都將被清除,這相當於為軟體重新提供了畫布以自由輸出。螢幕清除通常用於以下情況 1 當最後一個功能的執行完成時,輸出不再重要,並且需要顯示新的內容或選單。2 對於加密,例如某些記憶遊戲,在顯示幾秒鐘後,清除所有輸出。3 要顯示大部分關鍵...

在C語言中自增自減運算子有什麼作用?

這是一類特殊的運算子,自增運算子 和自減運算子 對變數的操作結果是增加1和減少1 例如 couter couter amount amount 看這些例子裡,運算子在前面還是在後面對本身的影響都是一樣的,都是加1或者減1,但是當把他們作為其他表示式的一部分,兩者就有區別了。運算子放在變數前面,那麼在...

c語言中括號裡的怎麼理解一般建立物件不是不帶引數嗎

建立物件 例項化 是使用的這個類的建構函式來實現的,這個建構函式可以有多個過載,但是預設情況下是有一個無參構造,所以很多類即使不寫構造也可以new出來 如果想使用其他的建構函式,或者某個類只提供了有參構造 這種情況下,c 不會自動加上無參建構函式 那麼在new的時候就必須根據方法簽名來提供對應的引數...