㈠ c語言共用體程序計算
這個key賦值,高八位為65,低八位為66,key.ch[0]為低八位,key.ch[1]為高八位,因為是char型,所以一個元素一個位元組,int型在一些編譯器中佔4個位元組,一些編譯器中佔2個位元組,但空間至少都和char ch[2]一樣大,若你先給字元數組賦值,那麼把輸入的key.[1]即高八位乘以256再加上輸入的key.ch[0]即低八位,組合起來即為i的數值,但要看你以什麼的形式輸出,以%d的形式輸出可以看到數值,以%c的形式輸出就會出錯,因為超出界了
㈡ C語言結構體與共用體和位運算的幾個問題
1.這個答案是不固定的,要看用的平台,在TC下面應該是2,在VC下面是4;那個b是一個指針,其實他相當於一個int類型,那個sizeof方法得出的結果是占幾個位元組. 2.這是一個對ASCII表的計算,要看出'1'的表值為49,'5'的表值為53,49+53=102,正好對應的是f 3.求鏈表的長度,你這個程序不全,但主體是對的.(鏈表是數據結構中的概念,你要是學習應該會很好理解) 4.我編譯的結果是16,應該是2+4+2+4+4=16才對,跟第1題差不多,表示的是這個結構占的位元組數 5.要弄清楚運算符的優先順序,那個式子相當於(4+11)再左移2位,相當於15/4=3,由於都是取整,不能四捨五入
㈢ 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語言有關共用體的使用方法,請前輩們請教謝謝啦!
共用體又稱聯合體,關鍵字union,正如其名字,其成員變數共同佔用同一段內存,這段內存的大小就是所有成員中最大的那個,所以整個共用體變數大小就是其最大成員大小,比如你代碼中的A大小就是成員c的大小8個位元組。
至於用處還是有很多的:
比如我們表示一個學生分數,有幼兒,小學,初中,這三種學生信息結構基本相同,但只有分數標准不一樣,幼兒分數(差、中、優),小學(C、B、A),初中(0~100分)。那麼我們就可以把學生信息定義成結構體,而結構成員分數那一塊定義成共用體(包含字元串類型,字元類型、數值類型)。這樣結構本身就不需要定義三種類型成員了。
又比如,數據傳遞時,用共用體表示數據,之後只要按照你的需求按不同格式獲取數據。
㈤ 關於c語言的共用體
在進行某些演算法的C語言編程的時候,需要使幾種不同類型的變數存放到同一段內存單元中。也就是使用覆蓋技術,幾個變數互相覆蓋。這種幾個不同的變數共同佔用一段內存的結構,在C語言中,被稱作「共用體」類型結構,簡稱共用體。註:在某些書籍中可能稱之為「聯合體」,但是「共用體」更能反映該類型在內存的特點。
共用體類型數據的特點
1.同一個內存段可以用來存放幾種不同類型的成員,但是在每一瞬間只能存放其中的一種,而不是同時存放幾種。換句話說,每一瞬間只有一個成員起作用,其他的成員不起作用,即不是同時都在存在和起作用。
2.共用體變數中起作用的成員是最後一次存放的成員,在存入一個新成員後,原有成員就失去作用。
3.共用體變數的地址和它的各成員的地址都是同一地址。
4.不能對共用體變數名賦值,也不能企圖引用變數名來得到一個值。
5.共用體類型可以出現在結構體類型的定義中,也可以定義共用體數組。反之,結構體也可以出現在共用體類型的定義中,數組也可以作為共用體的成員。
㈥ c語言共用體有關的求解
進行某些演算法的C語言編程的時候,需要使幾種不同類型的變數存放到同一段內存單元中。也就是使用覆蓋技術,幾個變數互相覆蓋。這種幾個不同的變數共同佔用一段內存的結構,在C語言中,被稱作「共用體」類型結構,簡稱共用體。註:在某些書籍中可能稱之為「聯合體」,但是「共用體」更能反映該類型在內存的特點。 共用體類型數據的特點 1.同一個內存段可以用來存放幾種不同類型的成員,但是在每一瞬間只能存放其中的一種,而不是同時存放幾種。換句話說,每一瞬間只有一個成員起作用,其他的成員不起作用,即不是同時都在存在和起作用。 2.共用體變數中起作用的成員是最後一次存放的成員,在存入一個新成員後,原有成員就失去作用。 3.共用體變數的地址和它的各成員的地址都是同一地址。 4.不能對共用體變數名賦值,也不能企圖引用變數名來得到一個值。 5.共用體類型可以出現在結構體類型的定義中,也可以定義共用體數組。反之,結構體也可以出現在共用體類型的定義中,數組也可以作為共用體的成員。
㈦ c語言中的共用體
我測試了一下
int為32bit
,long為32位
,char為8位機測試。
分析得出這樣的結果:
這正如共用結構體中
假如他們的共用首地址為0x10000000
那麼
地址
變數
0x10000000:
a[0]
如果執行語句
s.a[0]=0x39
0x10000004:
a[1]
相差4個位元組
那麼會產生如下變化:
0x10000000:
b
a[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
b
c同用了一個地址
如果對a賦值了也同時對b和c賦值
只是數據類型不同而已。
如果從地址上來分析
c如果定義的是c[8],那麼c[5]地址即為0x10000004
它的值就因該為0x38,因為和a[1]的地址相同。
查看b的是後可以直接用%d來查看
因為在本機上也是32bit和int相同
㈧ 在c語言中,共用體一般有什麼作用
共用體一般指聯合體,作用如下:
1、節省內存
有兩個很長的數據結構,不會同時使用,用結構體的話,只佔用最長的那個數據結構所佔用的空間,就足夠了。
2、做某些轉換用
union{char a[8];double x;};
x=20.8;
cout<<hex<<a[0]<<「 」<<a[1]<<…<<endl;
(8)c語言共用體類型能不能進行運算擴展閱讀:
結構體和共用體
結構體和共用體的區別在於:結構體的各個成員會佔用不同的內存,互相之間沒有影響;而共用體的所有成員佔用同一段內存,修改一個成員會影響其餘所有成員。
結構體佔用的內存大於等於所有成員佔用的內存的總和(成員之間可能會存在縫隙),共用體佔用的內存等於最長的成員佔用的內存。
共用體使用了內存覆蓋技術,同一時刻只能保存一個成員的值,如果對新的成員賦值,就會把原來成員的值覆蓋掉。
共用體也是一種自定義類型,可以通過它來創建變數,
㈨ C語言公共用體問題
共用體的成員變數都是有效的,你可以直接引用它們
但是注意,因為它們是共用一個地址,所以你直接引用,會得到你不想要的結果
union{
char c;
int a;}
例如上面,你先賦值了c,後賦值了a,但是a的值會把c的值覆蓋,所以使用的時候要注意
㈩ C語言 共用體 解釋下
B
共用體所佔內存大小就是其中占內存最大的變數所佔內存的大小,這里
long x[2]佔8*2=16
int y[4]佔4*4=16
char z[8]佔1*8=8
所以sizeof(them)=16
1.同一個內存段可以用來存放幾種不同類型的成員,但是在每一瞬間只能存放其中的一種,而不是同時存放幾種。換句話說,每一瞬間只有一個成員起作用,其他的成員不起作用,即不是同時都在存在和起作用。
2.共用體變數中起作用的成員是最後一次存放的成員,在存入一個新成員後,原有成員就失去作用。
3.共用體變數的地址和它的各成員的地址都是同一地址。