联合体(union)和结构体(struct)的区别
生活随笔
收集整理的這篇文章主要介紹了
联合体(union)和结构体(struct)的区别
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1.?聯(lián)合說明和聯(lián)合變量定義?
聯(lián)合也是一種新的數(shù)據(jù)類型,?它是一種特殊形式的變量。?
聯(lián)合說明和聯(lián)合變量定義與結(jié)構(gòu)十分相似。其形式為:?
union?聯(lián)合名{?
數(shù)據(jù)類型?成員名;?
數(shù)據(jù)類型?成員名;?
...?
}?聯(lián)合變量名;?
聯(lián)合表示幾個(gè)變量公用一個(gè)內(nèi)存位置,?在不同的時(shí)間保存不同的數(shù)據(jù)類型?和不同長(zhǎng)度的變量。?
下例表示說明一個(gè)聯(lián)合a_bc:?
union?a_bc{?
int?i;?
char?mm;?
};?
再用已說明的聯(lián)合可定義聯(lián)合變量。?
例如用上面說明的聯(lián)合定義一個(gè)名為lgc的聯(lián)合變量,?可寫成:?
union?a_bc?lgc;?
在聯(lián)合變量lgc中,?整型量i和字符mm公用同一內(nèi)存位置。?
當(dāng)一個(gè)聯(lián)合被說明時(shí),?編譯程序自動(dòng)地產(chǎn)生一個(gè)變量,?其長(zhǎng)度為聯(lián)合中最大的變量長(zhǎng)度。?
聯(lián)合訪問其成員的方法與結(jié)構(gòu)相同。同樣聯(lián)合變量也可以定義成數(shù)組或指針,但定義為指針時(shí),?也要用" ->;"符號(hào),?此時(shí)聯(lián)合訪問成員可表示成:?
聯(lián)合名->成員名?
另外,?聯(lián)合既可以出現(xiàn)在結(jié)構(gòu)內(nèi),?它的成員也可以是結(jié)構(gòu)。?
例如:?
struct{?
int?age;?
char?*addr;?
union{?
int?i;?
char?*ch;?
}x;?
}y[10];?
若要訪問結(jié)構(gòu)變量y[1]中聯(lián)合x的成員i,?可以寫成:?
y[1].x.i;?
若要訪問結(jié)構(gòu)變量y[2]中聯(lián)合x的字符串指針ch的第一個(gè)字符可寫成:?
*y[2].x.ch;?
若寫成"y[2].x.*ch;"是錯(cuò)誤的。?
2.?結(jié)構(gòu)和聯(lián)合的區(qū)別?
結(jié)構(gòu)和聯(lián)合有下列區(qū)別:?
1) 結(jié)構(gòu)和聯(lián)合都是由多個(gè)不同的數(shù)據(jù)類型成員組成,?但在任何同一時(shí)刻,? 聯(lián)合轉(zhuǎn)只存放了一個(gè)被選中的成員,?而 結(jié)構(gòu)的所有成員都存在。?
2) 對(duì)于聯(lián)合的不同成員賦值,?將會(huì)對(duì)其它成員重寫,?? 原來成員的值就不存在了,? 而對(duì)于結(jié)構(gòu)的不同成員賦值是互不影響的。?
下面舉一個(gè)例了來加對(duì)深聯(lián)合的理解。?
main()?
{?
union{???????????????????/*定義一個(gè)聯(lián)合*/?
int?i;?
struct{?????????????/*在聯(lián)合中定義一個(gè)結(jié)構(gòu)*/?
char?first;?
char?second;?
}half;?
}number;?
number.i=0x4241;?????????/*聯(lián)合成員賦值*/?
printf("%c%c\n",?number.half.first,?mumber.half.second);?
number.half.first='a';???/*聯(lián)合中結(jié)構(gòu)成員賦值*/?
number.half.second='b';?
printf("%x\n",?number.i);?
getch();?
}?
輸出結(jié)果為:?
AB?
6261?
從上例結(jié)果可以看出:?當(dāng)給i賦值后,?其低八位也就是first和second的值;當(dāng)給first和second賦字符后,?這兩個(gè)字符的ASCII碼也將作為i?的低八位和高八位。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)
聯(lián)合也是一種新的數(shù)據(jù)類型,?它是一種特殊形式的變量。?
聯(lián)合說明和聯(lián)合變量定義與結(jié)構(gòu)十分相似。其形式為:?
union?聯(lián)合名{?
數(shù)據(jù)類型?成員名;?
數(shù)據(jù)類型?成員名;?
...?
}?聯(lián)合變量名;?
聯(lián)合表示幾個(gè)變量公用一個(gè)內(nèi)存位置,?在不同的時(shí)間保存不同的數(shù)據(jù)類型?和不同長(zhǎng)度的變量。?
下例表示說明一個(gè)聯(lián)合a_bc:?
union?a_bc{?
int?i;?
char?mm;?
};?
再用已說明的聯(lián)合可定義聯(lián)合變量。?
例如用上面說明的聯(lián)合定義一個(gè)名為lgc的聯(lián)合變量,?可寫成:?
union?a_bc?lgc;?
在聯(lián)合變量lgc中,?整型量i和字符mm公用同一內(nèi)存位置。?
當(dāng)一個(gè)聯(lián)合被說明時(shí),?編譯程序自動(dòng)地產(chǎn)生一個(gè)變量,?其長(zhǎng)度為聯(lián)合中最大的變量長(zhǎng)度。?
聯(lián)合訪問其成員的方法與結(jié)構(gòu)相同。同樣聯(lián)合變量也可以定義成數(shù)組或指針,但定義為指針時(shí),?也要用" ->;"符號(hào),?此時(shí)聯(lián)合訪問成員可表示成:?
聯(lián)合名->成員名?
另外,?聯(lián)合既可以出現(xiàn)在結(jié)構(gòu)內(nèi),?它的成員也可以是結(jié)構(gòu)。?
例如:?
struct{?
int?age;?
char?*addr;?
union{?
int?i;?
char?*ch;?
}x;?
}y[10];?
若要訪問結(jié)構(gòu)變量y[1]中聯(lián)合x的成員i,?可以寫成:?
y[1].x.i;?
若要訪問結(jié)構(gòu)變量y[2]中聯(lián)合x的字符串指針ch的第一個(gè)字符可寫成:?
*y[2].x.ch;?
若寫成"y[2].x.*ch;"是錯(cuò)誤的。?
2.?結(jié)構(gòu)和聯(lián)合的區(qū)別?
結(jié)構(gòu)和聯(lián)合有下列區(qū)別:?
1) 結(jié)構(gòu)和聯(lián)合都是由多個(gè)不同的數(shù)據(jù)類型成員組成,?但在任何同一時(shí)刻,? 聯(lián)合轉(zhuǎn)只存放了一個(gè)被選中的成員,?而 結(jié)構(gòu)的所有成員都存在。?
2) 對(duì)于聯(lián)合的不同成員賦值,?將會(huì)對(duì)其它成員重寫,?? 原來成員的值就不存在了,? 而對(duì)于結(jié)構(gòu)的不同成員賦值是互不影響的。?
下面舉一個(gè)例了來加對(duì)深聯(lián)合的理解。?
main()?
{?
union{???????????????????/*定義一個(gè)聯(lián)合*/?
int?i;?
struct{?????????????/*在聯(lián)合中定義一個(gè)結(jié)構(gòu)*/?
char?first;?
char?second;?
}half;?
}number;?
number.i=0x4241;?????????/*聯(lián)合成員賦值*/?
printf("%c%c\n",?number.half.first,?mumber.half.second);?
number.half.first='a';???/*聯(lián)合中結(jié)構(gòu)成員賦值*/?
number.half.second='b';?
printf("%x\n",?number.i);?
getch();?
}?
輸出結(jié)果為:?
AB?
6261?
從上例結(jié)果可以看出:?當(dāng)給i賦值后,?其低八位也就是first和second的值;當(dāng)給first和second賦字符后,?這兩個(gè)字符的ASCII碼也將作為i?的低八位和高八位。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)
總結(jié)
以上是生活随笔為你收集整理的联合体(union)和结构体(struct)的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: xvid 数据编码和解码
- 下一篇: 2013Esri中国用户大会,show应