1樓:匿名使用者
前面對聯合變數的定義和聯合變數成員的表示以及對聯合變數的賦值作了描述,可以看出聯合與結構有許多相似之處,但是也指出了兩者的最大區別在於聯合是共址的,結構是異址的。即聯合的所有成員共同使用乙個記憶體位址,而結構的每個成員都有自己的記憶體位址。 由於聯合的共址特性使得它與結構產生了很大差別。
例如,在斌初值時,聯合變數只能給第乙個成員賦初值;不能對聯合變數名賦值;不能用聯合變數作函式引數,也不能用聯合變數作函式的返回值,只能用指向聯合變數的指標作函式引數。 下面舉出兩個例子說明聯合變數的使用和特點。 [例9.
1] 分析下列程式的輸出結果,進而說明聯合變數的成員是共址的。uninn data;main() 執行該程式輸出結果如下:
? ? 3.7(?表示無意義)
4ffd6 ffd6 ffd6 ffd6 說明: (1)該程式中,首先定義乙個聯合,其名為data,它有3個成員,分別是三種不同型別。又定義聯合變數d3,並給它的三個成員分別賦值。
當使用printf ( )函式輸出dl的三個成員的值時,前兩個成員輸出值是無意義的,只有最後乙個成員是有意義的,其值為3. 7.這說明:
某一時刻乙個聯合變數中只有乙個成員起作用,其他成員不起作用。 (2)輸出,sizeoe(dl )的值為4,這說明聯合變數d1佔記憶體4個位元組。在多個聯合成員共佔乙個記憶體位址時,該位址所指向的記憶體空間是所有成員中佔記憶體空間最大的成員所佔的記憶體空間。
該例中的三個成員所佔記憶體位元組數分別為1.2和4,最大的是4,因此,聯合變數dl所佔記憶體空間為4個位元組。 (3)使用printf ( )函式分別輸出聯合變數dl的三個成員的記憶體位址都是相同的,並且與聯合變數dl的位址值也是相同的,可見聯合變數各成員是共址的。
2樓:匿名使用者
舉個栗子,給你4個位元組的記憶體,一會讓你存整形數,一會讓你存位元組數,你怎麼定義這個型別?
union mytype
;這個共用體或者叫聯合中有兩個變數,但是這兩個變數使用的是同一塊記憶體,你可以在記憶體中存任何數,在用 mytype.a訪問的時候,它就是個整形;用mytype.b訪問的時候,它就是個字元型。
結構體就簡單了,所有內部變數獨立記憶體空間。
3樓:匿名使用者
union 目的在於節省空間,占用空間為變數中占用空間最大的那個變數 struct 是各個變數空間的總和
c語言中的*和&有什麼區別?
4樓:大大的
&和*是針對位的操作,&&與||是邏輯操作符。
設有變數x和y,則x&y,是先把x與y轉換成二進位制,再對每一位進行&運算,都為1,則結果為1,否則為0,x|y也是先把x與y轉換成二進位制,再對每一位進行|運算,只要有乙個為1,則結果為1,二個都為0,結果才為0;
x&&y,如果x與y都為真(非0),則結果為1,否則為0,x||y,只要x與y中有乙個為真(非0),則結果為1,只有兩都同時為0,結果才為0。
c語言裡面的聯合體和結構體有什麼區別,分別是什麼含義?感覺都是一樣的,都是類的不同特性
5樓:匿名使用者
聯合體與結構體是copy很容易混淆的概念。粗略一看,兩者無論宣告、定義還是定義物件的方式都很相似。然而這兩個東西的概念和作用實際千差萬別。
首先,聯合體的各個成員共用記憶體,並應該同時只能有乙個成員得到這塊記憶體的使用權(即對記憶體的讀寫),而結構體各個成員各自擁有記憶體,各自使用互不干涉。所以,某種意義上來說,聯合體比結構體節約記憶體。
舉個例子:
typedef struct
a;typedef union
u;sizeof(a)的值是8,sizeof(u)的值也是8(不是12)。
為什麼sizeof(u)不是12呢?因為union中各成員共用記憶體,i和j的記憶體是同一塊。而且整體記憶體大小以最大記憶體的成員的劃分。
即u的記憶體大小是double的大小,為8了。sizeof(a)大小為8,因為struct中i和j各自得到了一塊記憶體,每人4個位元組,加起來就是8了。
了解了聯合體共用記憶體的概念,也就是明白了為何每次只能對其乙個成員賦值了,因為如果對另乙個賦值,會覆蓋了上乙個成員的值。
6樓:匿名使用者
完全不一樣。復
例如:書包制;可以放置書本、筆盒bai、記事本du等物。
聯合體,僅zhi能放入一樣東dao
西的包(限制),其尺寸,是可放物品中,最大一件的體積。
結構體,是能放入所有物品的包,所以其尺寸,可同時容納多樣物品。
聯合體,同時間只能有乙個成員在內。或是說,可以用不同型態,去看同一組資料。
結構體,可以包含多個成員在一起,成員都能個別操作。
聯合變數? c語言中,聯合變數和結構體變數的概念相同嗎?如果不同,不同點在哪?
7樓:gta小雞
結構體(struct)中的每個變數都有屬於自己的記憶體空間,彼此互不衝突;而聯合體(union)中所有的變數共用同一片記憶體空間,它的大小等於占用空間最多的變數的大小,修改某乙個變數可能會影響到其他變數的值。
c語言的結構體和共同體的區別是什麼?
8樓:阿利葉麼緞
結構體(structure)是一種構造型別,它是由若干「成員」組成的。每乙個成員可以是乙個基本資料型別或者又是乙個構造型別,而且每個成員的資料型別可以相同也可以不相同。共同體(union)將幾種不同的變數儲存在同一記憶體單元中,也就是使用覆蓋技術,幾個變數互相覆蓋,這種幾個不同的變數共同占用一段記憶體的結構,可見二者最大的區別就是所占用的記憶體,結構體(structure)所占用的記憶體是分量記憶體之和,共同體(union)所占用的記憶體是等於最大的分量的記憶體。
具體來說,結構體(structure)與共同體(union)主要有以下區別:
1.結構體(structure)與共同體(union)都是由多個不同的資料型別成員組成,
但在任何同一時刻,
共同體(union)中只存放了乙個被選中的成員,
而結構體(structure)的所有成員都存在。在結構體(structure)中,各成員都占有自己的記憶體空間,它們是同時存在的。乙個結構體(structure)變數的總長度等於所有成員長度之和。
在共同體(union)中,所有成員不能同時占用它的記憶體空間,它們不能同時存在。共同體(union)變數的長度等於最長的成員的長度。
2.對於共同體(union)的不同成員賦值,
將會對其它成員重寫,
原來成員的值就不存在了,
而對於結構體(structure)的不同成員賦值是互不影響的。
9樓:閆恆箕己
在實際問題中,一組資料往往具有不同的資料型別。例如,在學生登記表中,姓名應為字元型;學號可為整型或字元型;年齡應為整型;性別應為字元型;成績可為整型或實型。顯然不能用乙個陣列來存放這一組資料。
因為陣列中各元素的型別和長度都必須一致,以便於編譯系統處理。為了解決這個問題,c語言中給出了另一種構造資料型別——「結構(structure)」或叫「結構體」。
它相當於其它高階語言中的記錄。「結構」是一種構造型別,它是由若干「成員」組成的。每乙個成員可以是乙個基本資料型別或者又是乙個構造型別。
結構既是一種「構造」而成的資料型別,那麼在說明和使用之前必須先定義它,也就是構造它。如同在說明和呼叫函式之前要先定義函式一樣。
讓程式設計序的人自定義乙個資料型別。 共用體是在同一儲存空間上存不同型別的資料,用於節省空間
在c語言中,使用結構體的時候 "->" 和 「." 有什麼區別,越詳細越好,謝謝?
10樓:大寶與瑩寶
定義的結構體如果是指標,訪問成員時就用->
如果定義的是結構體變數,訪問成員時就用.
指標引用任何變數都是這樣引用的 ,規定的
我忘了 ex = ; 這樣的初始化是否合法了,如果合法的話,那就是編譯器做了工作,把
ex = ; 轉換成了 (*ex.a) = 10;ex.b = 99;
結構體成員運算子。
->指標運算子。
1、如果結構體中的成員均為一般變數(包括結構體變數),則使用「.」,如果成員變數為指標(不管指向什麼,包括結構體),則使用「->」。
2、如果定義了結構體陣列指標,則可分別使用「.」和「->」,區別在於指標帶下標時,以是陣列形式訪問,此時用「.」,如果不帶下標(或使用偏移),此時用「->」。
c語言中聯合體是什麼樣的?與結構體不一樣吧?還有運算子的目數怎麼計算?
11樓:匿名使用者
共用體構造資料型別,也叫聯合體
用途:使幾個不同型別的變數共佔一段記憶體(相互覆蓋)
結構體是一種構造資料型別
用途:把不同型別的資料組合成乙個整體-------自定義資料型別
結構體變數所佔記憶體長度是各成員佔的記憶體長度的總和。
共同體變數所佔記憶體長度是各最長的成員佔的記憶體長度。
共同體每次只能存放哪個的一種!!
共同體變數中起作用的成員是尊後一次存放的成員,
在存入新的成員後原有的成員失去了作用!
structure 與 union主要有以下區別:
1. struct和union都是由多個不同的資料型別成員組成, 但在任何同一時刻, union中只存放了乙個被選中的成員, 而struct的所有成員都存在。在struct中,各成員都占有自己的記憶體空間,它們是同時存在的。
乙個struct變數的總長度等於所有成員長度之和。在union中,所有成員不能同時占用它的記憶體空間,它們不能同時存在。union變數的長度等於最長的成員的長度。
2. 對於union的不同成員賦值, 將會對其它成員重寫, 原來成員的值就不存在了, 而對於struct的不同成員賦值是互不影響的。
舉乙個例子:
例: #include
void main()
half;
}number;
number.i=0x4241; /*聯合成員賦值*/
printf("%c%c\n", number.half.first, number.half.second);
number.half.first='a'; /*聯合中結構成員賦值*/
number.half.second='b';
printf("%x\n", number.i);
} 輸出結果為:
ab 6261
c語言中if和switch有什麼區別
布依秋 總體來說,if語句由於在英語字面上意思比較直觀,就是 如果 所以比較容易理解。就是對 如果 情況的判斷和處理。而 switch 的功能其實和if差不多,但是比較容易出錯的地方就是,在switch語句中,如果在分支中不加break。容易造成邏輯的錯誤。新手很容易犯這個錯誤 湯贊悅 if 用於單...
資料結構C語言,資料結構和C語言有什麼區別?
typedef struct qnode qnode,queueptr 定義兩個新資料型別qnode,queueptr,相當於 typedef struct qnode qnode typedef struct qnode queueptr 使用方法 qnode qdata struct qnode...
c語言中p和p1有什麼區別,C語言中p 和p 1有什麼區別?
第一句應該是p p 1吧。這2句的結果是一樣的,相信樓主也是知道的,都表示p 1然後結果儲存在p中。但是所有的研發還是實驗,如果碰到自加1的運算都會選擇p 這裡面的關鍵點是p 的運算速度比p p 1快,雖然一條語句說快能塊多少呢?但是運算步驟少,不僅僅是提高速度,而且可以減少出錯的機率,這對於工程來...