Unions 在C語言的簡單介紹
References:
1. http://publications.gbdirect.co.uk/c_book/chapter6/unions.html
OS : Ubuntu 11.10 x86_64
gcc : 4.6.1
最近寫C語言用到了union這個structure,一開始還不是很懂在作什麼,所以看了網路上的一些範例以及說明,以下是依照我的理解來說明。
簡單的說就是union裏面的變數是共用同一個記憶體,資料是以最後一筆寫入變數為主,而且分配的記憶體是以最大的資料結構做為分配的依據。所以我用以下的範例來說明,當最後一筆資料是寫入un_double所以之前un_char,un_int所寫的入資料將會被換掉,畢竟是使用同一塊記憶體。在記憶體配置的部份,最大是double的size是8bytes,所以ex_type的size是8bytes。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 #include <stdio.h>#include <stdarg.h>struct ex_type{union{double un_double;char un_char;int un_int;};};int main(int argc ,char** argv){struct ex_type tt ; tt.un_char='a'; tt.un_int=10; tt.un_double=10.5;printf("struct ex_type size = %d\n",sizeof(struct ex_type));printf("double size = %d\n",sizeof(double));printf("char size = %d\n",sizeof(char));printf("int size = %d\n",sizeof(int))
1. http://publications.gbdirect.co.uk/c_book/chapter6/unions.html
OS : Ubuntu 11.10 x86_64
gcc : 4.6.1
最近寫C語言用到了union這個structure,一開始還不是很懂在作什麼,所以看了網路上的一些範例以及說明,以下是依照我的理解來說明。
簡單的說就是union裏面的變數是共用同一個記憶體,資料是以最後一筆寫入變數為主,而且分配的記憶體是以最大的資料結構做為分配的依據。所以我用以下的範例來說明,當最後一筆資料是寫入un_double所以之前un_char,un_int所寫的入資料將會被換掉,畢竟是使用同一塊記憶體。在記憶體配置的部份,最大是double的size是8bytes,所以ex_type的size是8bytes。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 #include <stdio.h>#include <stdarg.h>struct ex_type{union{double un_double;char un_char;int un_int;};};int main(int argc ,char** argv){struct ex_type tt ; tt.un_char='a'; tt.un_int=10; tt.un_double=10.5;printf("struct ex_type size = %d\n",sizeof(struct ex_type));printf("double size = %d\n",sizeof(double));printf("char size = %d\n",sizeof(char));printf("int size = %d\n",sizeof(int))
留言