c語言的結構體和共同體的區別是什麼

2022-02-05 21:55:03 字數 3144 閱讀 4504

1樓:百文e見

結構體(structure)是一種構造型別,它是由若干「成員」組成的。每乙個成員可以是乙個基本資料型別或者又是乙個構造型別,而且每個成員的資料型別可以相同也可以不相同。共同體(union)將幾種不同的變數儲存在同一記憶體單元中,也就是使用覆蓋技術,幾個變數互相覆蓋,這種幾個不同的變數共同佔用一段記憶體的結構,可見二者最大的區別就是所佔用的記憶體,結構體(structure)所佔用的記憶體是分量記憶體之和,共同體(union)所佔用的記憶體是等於最大的分量的記憶體。

具體來說,結構體(structure)與共同體(union)主要有以下區別:

1.結構體(structure)與共同體(union)都是由多個不同的資料型別成員組成, 但在任何同一時刻, 共同體(union)中只存放了乙個被選中的成員, 而結構體(structure)的所有成員都存在。在結構體(structure)中,各成員都佔有自己的記憶體空間,它們是同時存在的。

乙個結構體(structure)變數的總長度等於所有成員長度之和。在共同體(union)中,所有成員不能同時佔用它的記憶體空間,它們不能同時存在。共同體(union)變數的長度等於最長的成員的長度。

2. 對於共同體(union)的不同成員賦值, 將會對其它成員重寫, 原來成員的值就不存在了, 而對於結構體(structure)的不同成員賦值是互不影響的。

2樓:手機使用者

結構體元素與元素各自有各自的空間,而共同體各元素的空間是相同的,整體的空間大小由佔最大空間的元素決定。

3樓:黑馬程式設計師

結構體(structure)與共同體(union)主要有以下區別:

1.結構體(structure)與共同體(union)都是由多個不同的資料型別成員組成, 但在任何同一時刻, 共同體(union)中只存放了乙個被選中的成員, 而結構體(structure)的所有成員都存在。在結構體(structure)中,各成員都佔有自己的記憶體空間,它們是同時存在的。

乙個結構體(structure)變數的總長度等於所有成員長度之和。在共同體(union)中,所有成員不能同時佔用它的記憶體空間,它們不能同時存在。共同體(union)變數的長度等於最長的成員的長度

2. 對於共同體(union)的不同成員賦值, 將會對其它成員重寫, 原來成員的值就不存在了, 而對於結構體(structure)的不同成員賦值是互不影響的

c語言結構體與共同體的問題

4樓:

struct stud

a,*p; //a 共佔記憶體位元組數為 22

5樓:霜皛

結構體 是所有的裡面的型別的變數 都佔記憶體共同體 是所有裡面型別的變數 只算佔有最大記憶體的那個7個char+5個int+1個double下面我記得不太清楚 你可以翻翻書

char 是1個位元組

int 0.5位元組

double 2個位元組

所以答案=》 7+2.5+2=11.5

6樓:匿名使用者

在結構體中:

為所有變數所佔位元組和的總數;

在聯合體中:

為所定義變數中最長的那乙個型別所佔的位元組數;

具本變數型別依不同軟硬體環境有所不同;

7樓:

windows下

char 1byte

int 2byte

double 8byte

所以 a 1*6+2*4+8= 22

linux下

char 1byte

int 4byte

double 16byte

所以 a 1*6+4*4+16=38

8樓:翁氏家族_知識

6+4*2+8=22

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

9樓:阿俠

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

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

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

c語言中結構體和共同體及應用不是很明白,試舉例說明。

10樓:匿名使用者

請酌情應用!!! 雖然聯合體與結構體在定義形式上類似,但它們在儲存空間的分配上是有本質區別的。 結構體:

按照定義中各個成員中各資料型別所需要的儲存空間的 總和 來分配儲存單元,其中各成員的儲存位置是不同的。 聯合體: 按定義中需要儲存空間中資料型別所佔空間 最大的成員 來分配儲存單元,其他成員也使用該空間,它們的首位址是相同的。

在定義聯合體型別變數時,不僅可以將型別的定義與變數的定義分開(如上面的定義),也可以在定義聯合體型別的同時定義該型別的變數,或者直接定義聯合體型別變數。在程式中不能直接引用聯合體變數本身,而只能引用聯合體變數中的各成員。引用的聯合體變數成員的一般形式為 聯合體變數名.

成員名 說明:1.由於乙個聯合體變數中的各成員共用一段儲存空間,因此,在任一時刻,只能有一種型別的資料存放在該變數中,即在任一時刻,只有乙個成員的資料有意義,其他成員的資料是沒有意義的。

2.在引用聯合體變數中的成員時,必須保證資料的一致。例如,如果最近一次存入到聯合體變數中的是整型成員的資料,則在下一次取數時,也只能取該變數中整型成員中的資料,而取該變數中的其他型別成員中的資料一般是沒有意義的。

3.在定義聯合體變數時不能為其初始化,並且,聯合體變數不能作為函式引數。4.

聯合體型別與結構體型別可以互相巢狀,即聯合體型別可以作為結構體型別的成員,結構體型別也可以作為聯合體型別的成員。

11樓:匿名使用者

#define max 3typedef structdata[max;sizeof(data)==2+2*3+4=12uniondata1[max; sizeof(data)==6(最大的,他們公用)

共用體和結構體的區別,在C語言中,結構體和共用體的概念和兩者的區別是什麼啊?

一 變數長度不同 結構體變數所佔記憶體長度是各成員佔的記憶體長度之和,每個成員分別佔有其自己的記憶體單元。共用體變數所佔的記憶體長度等於最長的成員的長度。二 佔用空間不同 結構體是同時存在的,並一次佔用一段連續的記憶體空間 而共用體則是多個共用成員佔用同乙個開始的記憶體位址,同時他們只能存在一各,所...

人類命運共同體的內涵和意義是什麼?

人類命運共同體是和中華文明 甚至東方文明相聯絡的。東方文明自古以來就有著非常深刻的哲理思考和邏輯比如 中國自古就提出天人合一的概念 這是一種自然法則。道家強調道生。一 一生。二 二生。三 三生萬物 道法自然的規律一定程度上 命運共同體和天人合一是相連線的。從整個人類社會來看人類社會是融為一體的今天的...

C語言關於結構體的問題,C語言結構體成員的引用問題

你要傳的是乙個陣列吧,直接這樣寫就行了 void show struct length pointer 使用時就可以按你那樣的直接取下標 point count 呼叫也不對 void show pointer 不知道這裡怎麼錯了,請大家講下 改成show pointer 就行了,還有你之前的定義st...