求教一道C語言「結構體與共用體」的問題

時間 2025-05-29 21:20:14

共用體變數可以作結構體的成員,但結構體變數不可以是共用體的成員為什麼是錯的?

1樓:網友

這句話錯了,因為結構體變數也可以是共用體的成員。

下圖是乙個例子,演示了共用體變數可以作為結構體的成員,結構體變數也可以作為共用體的成員:

2樓:匿名使用者

結構體可以是共用體的成員。

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

3樓:google也知道

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

union 共用體名。

union data

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

union data /*共用體*/

mm;struct stud /*結構體* /

main( )

執行程式輸出:

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

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

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

union data /*共用體*/

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

main( )

mm;;printf("%d",;

printf("%", ;

w';printf("%,%c",,;

執行程式輸出為:

程式最後一行的輸出是我們無法預料的。其原因是連續做'w';;兩個連續的賦值語句最終使共用體變數的成員所佔四位元組被寫入,而寫入的字元被覆蓋了,輸出的字元變成了符號「 =」。事實上,字元的輸出是無法得知的,由寫入記憶體的資料決定。

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

c語言中的共用體是什麼

4樓:黑科技

一、共同體的簡介:

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

二、共同體型別資料的特點:

1.同乙個記憶體段可以用來存放幾種不同型別的成員,但在每一瞬間只能存放其中的一種,而不是同時存放幾種;

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

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

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

5.共同體型別可以出現在結構體型別的定義中,也可以定義共同體陣列。

結構體與共用體在定義及應用方面有何異同?

5樓:

摘要。1)結構體和共同體都是構造資料型別,使用它們都可儲存多種型別的資料,可以方便地組織不同型別的資料。(2)結構體佔用的空間是所有成員所佔用空間的和,而共用體則是最大成員所佔據的空間。

結構體重在組織多種型別的資料,從而構造乙個複雜的資料型別,而共用體重在強調記憶體的共享與重複使用。

1)結構體和共同體都是構造資料型別,使用它們都可儲存多種型別的資料,可以物滑方便地組織不同型別的資料。(2)結構體佔用的空間是所有成員所佔用空間的和,而共用體則是最大成員所佔據的空間。結構體重在組搭飢織罩枝臘多種型別的資料,從而構造乙個複雜的資料型別,而共用體重在強調記憶體的共享與重複使用。

結構體中每乙個成員都有自己的記憶體空間。因此,結構體總大小一般情況下等於各成員大小返李之和(先不考慮記憶體對齊)。共用體又叫聯合體,每乙個成員都共享記憶體空間。

因此,共用體大小等於成員中最大的那個大小。結構體我就不說伏世猜了,它用處很廣,最常見的是用缺型它儲存乙個記錄。例如,學生管理程式中,乙個學生的資訊。

共用體,我看見很少人會用,就不得不說說了,其實,共用體有很多妙用,用好了,會帶來意想不到的效果。如果光用共用體,那麼實用性會減少很多,通常和結構體一起使用。

c語言結構體的一道題,C語言結構體的一道題 struct STU char name 10 int num

作為函式引數傳遞的值和址是有本質區別的。作為值傳送的變數,在被調函式中完全等同於乙個初始化了的區域性變數,但按址傳送的變數 指標或陣列 就等同於外部變數。對於函式f 中形參num,改變它的值時,不會不會影響實參的值,也就是不能將其值的改變傳回到實參中。下面的 中,將num按址方式傳遞,以便達到原有發...

求教一道c語言題目,求教一道C語言題目

c語言中宣告陣列時,一定要顯式的指明陣列長度,所以陣列長度是個常數,int a n 這種宣告法是明顯錯誤的。你可以看到,n最大值是10,那麼直接宣告乙個int a 10 就可以了。另外,你的交換演算法也還有問題,修改如下,注釋並且修改 include int main void temp2 a n ...

c語言結構體中的陣列怎麼賦值,C語言,結構體中的陣列怎麼賦值,?

念憶 intmain void printf d,s n bao.id,bao.name 輸出是4224528,空 應該是null structstudentsbao 可以。第一種賦值方法 strcpy bao.name,bao 可以,printf d,s n bao.id,bao.name bao...