❶ c語言中的共用體問題
答案是 39 9 (我的電腦上運行的結果)
由共用體的定義,可以知道 s 佔8個位元組(該共用體中最長的是 int a[2])
前4個位元組存放的是 0x39,後4個位元組存放的是 0x38
輸出長整型時,因為 long 佔4個位元組,所以輸出 39
char型佔一個位元組,所以 s.c[0] 中存放的是前4個位元組中的第一個,
存放的應該是 0x39,對應的 %d 是57,這個剛好是字元 '9' 的ASCII碼,故輸出為9。
這個要知道數在內存是如何存放的。
❷ C語言中共用體怎麼用
共用體在同一時間只能使用其中一個成員的它的存儲類型是覆蓋存儲的當做中間變數比較合適。省存儲空間
❸ C語言共用體是什麼
共同體指的是
long w;
float x;
int y;
char z;
這幾個變數用同一塊內存,內存大小取這幾個變數中的最大值
位元組 long int float char double
16位機 4 2 4 1 8
32位機 4 4 4 1 8
64位機 8 4 4 1 8
如果是32位機上面一個共同體變數佔4個位元組,如果是64位機,佔8個位元組
所以答案應該是3.1416
❹ c語言中什麼是共用體
共用體是一種特殊的結構變數,他的成員共用同一個內存空間,比如括弧所在的內容應該這樣輸入:
union abc
{
char[10] wu;
long xuehao;
};
因為wu和xuehao 是佔用同一段內存空間的,確切的說是他們的存放空間首地址相同,所以他們是無法單獨存在的,擁有這個共用體的結構只能擁有wu 或xuehao ,如果對wu賦值,再對xuehao賦值,xuehao覆蓋了wu,wu變為沒有意義的了,反之一樣,所以不可能同時出現
❺ 請解釋C語言中共用體的定義和使用方法
所謂共用體類型是指將不同的數據項組織成一個整體,它們在內存中佔用同一段存儲單
元。其定義形式為:
union 共用體名
{成員表列};
7.5.1 共用體的定義
union data
{
int a ;
float b ;
d o u b l e c ;
c h a r d ;
} obj;
該形式定義了一個共用體數據類型union data ,定義了共用體數據類型變數o b j。共用體
數據類型與結構體在形式上非常相似,但其表示的含義及存儲是完全不同的。
-================
給你一個參考網址:http://www.gotohelp.cn/Html/C/2006-1/4/01042858.html
或http://www.bc-cn.net/Article/kfyy/cyy/jc/200511/936.html
❻ C語言共用體。。。
不是說只能用一次,而是共用體的成員某一時間段內只有一個是有效的(只能使用其中一個),其他的是無意義的。
共用體的多個成員公用同一段地址空間,所以在一段時間內只有一個有意義。例如
union {
char a;
int b;
float c;
} u;
void f1(void) { //錯誤用法
u.a = 'a';
u.b = 1; //執行之後u.a的值已經被改變了
printf("%c, %d\n", u.a, u.b); // 執行時a的值已經被改變了,是沒有意義的
}
void f2(void) { //正確用法
u.a = 'a';
printf("%c\n", u.a);
u.b = 1;
printf("%d\n", u.b);
}
void main() {
f1();
f2();
}
❼ 關於c語言的共用體
在進行某些演算法的C語言編程的時候,需要使幾種不同類型的變數存放到同一段內存單元中。也就是使用覆蓋技術,幾個變數互相覆蓋。這種幾個不同的變數共同佔用一段內存的結構,在C語言中,被稱作「共用體」類型結構,簡稱共用體。註:在某些書籍中可能稱之為「聯合體」,但是「共用體」更能反映該類型在內存的特點。
共用體類型數據的特點
1.同一個內存段可以用來存放幾種不同類型的成員,但是在每一瞬間只能存放其中的一種,而不是同時存放幾種。換句話說,每一瞬間只有一個成員起作用,其他的成員不起作用,即不是同時都在存在和起作用。
2.共用體變數中起作用的成員是最後一次存放的成員,在存入一個新成員後,原有成員就失去作用。
3.共用體變數的地址和它的各成員的地址都是同一地址。
4.不能對共用體變數名賦值,也不能企圖引用變數名來得到一個值。
5.共用體類型可以出現在結構體類型的定義中,也可以定義共用體數組。反之,結構體也可以出現在共用體類型的定義中,數組也可以作為共用體的成員。
❽ c語言中的共用體
共用體里的所有變數是共地址的.即所有變數的地址是相同的.s.a[0]=0x39;如果是16位系統的話,在內存中的表示形式是3900s.a[1]=0x38,在內存中的表示形式是3800所以在內存中的形式是39003800 (3900是低位位元組,3800是高位位元組,其中3900中的39又是低位,00是高位,3800中的38是低位,00是高位.)由於在內存中是以低位先存的方式.所以實際地址是:00380038共用體內的變數地址相同,所以輸出s.b的地址就是00380039,即380039.%lx是以地址方式輸出,即輸出變數的地址.s.c[0]是字元型,只有一個位元組,地址截斷,截取最低的地址,即就是39這里的39是16進制,表示的ASCII是57,即字元'9',所以輸出s.c[0]就是字元'9'了.
❾ 在c語言中,共用體一般有什麼作用
所謂共用體類型是指將不同的數據項組織成一個整體,它們在內存中佔用同一段存儲單元。其定義形式為:
union 共用體名
{成員表列};
union data
{
int a ;
float b;
doublec;
chard;
}obj;
該形式定義了一個共用體數據類型union data ,定義了共用體數據類型變數obj。共用體數據類型與結構體在形式上非常相似,但其表示的含義及存儲是完全不同的。先讓我們看一個小例子。
union data /*共用體*/
{
int a;
float b;
double c;
char d;
}mm;
struct stud /*結構體* /
{
int a;
float b;
double c;
char d;
};
main( )
{
struct stud student;
printf("%d,%d",sizeof(struct stud),sizeof(union data));
}
運行程序輸出:
15,8
程序的輸出說明結構體類型所佔的內存空間為其各成員所佔存儲空間之和。而形同結構體的共用體類型實際佔用存儲空間為其最長的成員所佔的存儲空間。
對共用體的成員的引用與結構體成員的引用相同。但由於共用體各成員共用同一段內存空間,使用時,根據需要使用其中的某一個成員。從圖中特別說明了共用體的特點,方便程序設計人員在同一內存區對不同數據類型的交替使用,增加靈活性,節省內存。
可以引用共用體變數的成員,其用法與結構體完全相同。若定義共用體類型為:
union data /*共用體*/
{
int a;
float b;
double c;
char d;
}mm;
其成員引用為:mm.a,mm.b,mm.c,mm.d 但是要注意的是,不能同時引用四個成員,在某一時刻,只能使用其中之一的成員。
main( )
{
union data
{
int a;
float b;
double c;
char d;
}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);
}
運行程序輸出為:
6
6 7.2
3 4.2,=
程序最後一行的輸出是我們無法預料的。其原因是連續做mm.d='W';mm.b=34.2;兩個連續的賦值語句最終使共用體變數的成員mm.b所佔四位元組被寫入34.2,而寫入的字元被覆蓋了,輸出的字元變成了符號「 =」。事實上,字元的輸出是無法得知的,由寫入內存的數據決定。
例子雖然很簡單,但卻說明了共用體變數的正確用法。
❿ 在c語言中,共用體一般有什麼作用
共用體一般指聯合體,作用如下:
1、節省內存
有兩個很長的數據結構,不會同時使用,用結構體的話,只佔用最長的那個數據結構所佔用的空間,就足夠了。
2、做某些轉換用
union{char a[8];double x;};
x=20.8;
cout<<hex<<a[0]<<「 」<<a[1]<<…<<endl;
(10)c語言中的共用體擴展閱讀:
結構體和共用體
結構體和共用體的區別在於:結構體的各個成員會佔用不同的內存,互相之間沒有影響;而共用體的所有成員佔用同一段內存,修改一個成員會影響其餘所有成員。
結構體佔用的內存大於等於所有成員佔用的內存的總和(成員之間可能會存在縫隙),共用體佔用的內存等於最長的成員佔用的內存。
共用體使用了內存覆蓋技術,同一時刻只能保存一個成員的值,如果對新的成員賦值,就會把原來成員的值覆蓋掉。
共用體也是一種自定義類型,可以通過它來創建變數,