C中的union和struct的區別,為什麼要發明union?

來源:互聯網
上載者:User
union和struct的區別在於:

1、對於一個union類型的變數,所有成員變數共用一塊記憶體,該記憶體的大小有這些成員變數中長度最大的一個來決定

2、union分配的記憶體是連續的,這一點非常重要。

更具體的看這裡,還有測試代碼呢(附件1):

那為什麼要發明union呢?這是由於union的特性決定的,特別是上述的第二點,因為struct中成員變數雖然記憶體都是獨立的,但是struct不能保證分配的記憶體是連續的。

舉個例子:CPU的ax寄存器分為ah和al兩部分,我們現在要給其賦值,就可以採用union:

union _ax_register {

int i; // 4Bytes, union將按此分配一個4位元組的連續記憶體

unsigned short ah; // 2 Bytes

unsigned short al; // 2 Bytes

} ax_register;

現在,給ax_register.i賦值,其高16bit就會賦給ah,低16bit就會賦給al,是不是很方便呢?

再舉個例子,IP地址,我們使用union,就可以直接給他賦一個int值,就能給IP的四個段同時賦值,如果用struct,就麻煩多嘍,如下:

union _ip_address {

int i; // spaceholder

unsigned char ip_first_num;

unsigned char ip_second_num;

unsigned char ip_third_num;

unsigned char ip_fourth_num;

} ip_address;

這樣,給ip_address.i 賦值,就自動將其8bit 8bit的賦給了四個IP欄位。是不是很方便?更方便的是,現在要比較兩個IP地址的大小,只要比較這個int值就OK了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.