日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java c语言union转换_C语言联合体(union)的使用方法及其本质-union

發布時間:2025/3/21 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java c语言union转换_C语言联合体(union)的使用方法及其本质-union 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自:https://blog.csdn.net/sizhouqun_84342712/article/details/53187106

1.聯合體union的基本特性——和struct的同與不同

union,中文名“聯合體、共用體”,在某種程度上類似結構體struct的一種數據結構,共用體(union)和結構體(struct)同樣可以包含很多種數據類型和變量。不過區別也挺明顯:結構體(struct)中所有變量是“共存”的——優點是“有容乃大”,全面;缺點是struct內存空間的分配是粗放的,不管用不用,全分配。而聯合體(union)中是各變量是“互斥”的——缺點就是不夠“包容”;但優點是內存使用更為精細靈活,也節省了內存空間。

2.雙刃劍——多種訪問內存途徑共存

//example

#include

union var{

long int l;

int i;

};

main(){

union var v;

v.l = 5;

printf("v.l is %d\n",v.i);

v.i = 6;

printf("now v.l is %ld! the address is %p\n",v.l,&v.l);

printf("now v.i is %d! the address is %p\n",v.i,&v.i);

}

結果:

v.l is 5

now v.l is 6! the address is 0xbfad1e2c

now v.i is 6! the address is 0xbfad1e2c

3.聯合體union和大小端(big-endian、little-endian)

#include

union var{

char c[4];

int i;

};

int main(){

union var data;

data.c[0] = 0x04;//因為是char類型,數字不要太大,算算ascii的范圍~

data.c[1] = 0x03;//寫成16進制為了方便直接打印內存中的值對比

data.c[2] = 0x02;

data.c[3] = 0x11;

//數組中下標低的,地址也低,按地址從低到高,內存內容依次為:04,03,02,11。總共四字節!

//而把四個字節作為一個整體(不分類型,直接打印十六進制),應該從內存高地址到低地址看,0x11020304,低位04放在低地址上。

printf("%x\n",data.i);

}

結果:

11020304

證明我的32位linux是小端(little-endian)

4.聯合體union所占內存空間大小

#include

union sizeTest{

int a;

double b;

};

main(){

union sizeTest unionA;

union sizeTest unionB;

union sizeTest unionC;

printf("the initial address of unionA is %p\n",&unionA);

printf("the initial address of unionB is %p\n",&unionB);

printf("the initial address of unionC is %p\n",&unionC);

}

打印,可以看到結果:

the initial address of unionA is 0xbf9b8df8

the initial address of unionB is 0xbf9b8e00

the initial address of unionC is 0xbf9b8e08

很容易看出,8,0,8,這間隔是8字節,按double走的。

怕不保險,再改一下,把int改成數組,其他不變:

union sizeTest{

int a[10];

double b;

};

打印

the initial address of unionA is 0xbfbb7738

the initial address of unionB is 0xbfbb7760

the initial address of unionC is 0xbfbb7788

88-60=28

60-38=28

算錯了?我說的可是16進制0x。那么0x28就是40個字節,正好是數組a的大小。

似乎忘了一個功能——sizeof() ??用sizeof直接看,就知道union的大小了

printf("the sizeof of unionA is %d\n",sizeof(unionA));

printf("the sizeof of unionB is %d\n",sizeof(unionB));

printf("the sizeof of unionC is %d\n",sizeof(unionC));

printf("the sizeof of union is %d\n",sizeof(union sizeTest));

5.聯合體union適用場合

有了前邊那個驗證,基本可以確認,union的內存是照著里邊占地兒最大的那個變量分的。

也就可以大膽的推測一下,這種union的使用場合,是各數據類型各變量占用空間差不多并且對各變量同時使用要求不高的場合(單從內存使用上,我覺得沒錯)。

像上邊做的第二個測試,一個數組(或者更大的數組int a[100]),和一個或者幾個小變量寫在一個union里,實在沒什么必要,節省的空間太有限了,還增加了一些風險(最少有前邊提到的邏輯上的風險)。所以,從內存占用分析,這種情況不如直接struct。

不過話說回來,某些情況下雖然不是很節約內存空間,但是union的復用性優勢依然存在啊,比如方便多命名,這種“二義性”,從某些方面也可能是優勢。這種方法還有個好處,就是某些寄存器或通道大小有限制的情況下,可以分多次搬運。

6.本質&進階

沒錯,union的成員變量是相當于開辟了幾個接口(即union包含的變量)!但是,沒開辟就不能用了?當然也能用!??寫個小測試:

#include

union u{

int i;

double d;//這個union有8字節大小

};

main(){

union u uu;

uu.i = 10;

printf("%d\n",uu.i);

char * c;

c = (char *)&uu;//把union的首地址賦值、強轉成char類型

c[0] = 'a';

c[1] = 'b';

c[2] = 'c';

c[3] = '\0';

c[4] = 'd';

c[5] = 'e';

//最多能到c[7]

printf("%s\n",c);//利用結束符'\0'打印字符串"abc"

printf("%c %c %c %c %c %c\n",c[0],c[1],c[2],c[3],c[4],c[5]);

}

總結

以上是生活随笔為你收集整理的java c语言union转换_C语言联合体(union)的使用方法及其本质-union的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日批视频在线免费看 | 韩国三级丰满少妇高潮 | 三级免费黄| 五月婷婷丁香激情 | 在线观看香蕉视频 | 韩国精品一区二区 | 午夜视频在线观看网站 | 污视频免费看 | 干欧美少妇 | 深爱开心激情网 | 国产剧情在线一区 | 丰满少妇在线观看网站 | 欧美在线一级 | 午夜精品久久久久久久久久 | a色网站 | 久久av影院| 亚洲社区在线 | 人人看人人做 | 红桃视频国产精品 | 2021国产精品| www激情 | 男生插女生的网站 | 国产激情视频一区二区 | 国产毛片基地 | 精品中出 | 久久久www成人免费无遮挡大片 | 免费观看污视频 | 亚洲四区在线 | 俄罗斯videodesxo极品 | 天天插夜夜 | 激情四射网站 | 91国自产精品中文字幕亚洲 | 91n在线观看 | 亚洲免费视频大全 | 亚洲精品一区二区三区精华液 | 人人人草 | 五月天久久久久 | 91少妇丨porny丨 | 97超碰资源总站 | 国产一级片免费在线观看 | 国产精品一区二区三区四区 | 久久91精品国产91久久小草 | 青青草久久 | 99亚洲天堂 | 一起操17c| 黄色在线播放 | 免费黄色一级 | 姐姐av| 夫妻淫语绿帽对白 | 熊出没之冬日乐翻天免费高清观看 | 九九午夜视频 | 91久久久久久久久久久久 | 第一页在线视频 | 国产乱淫av麻豆国产免费 | 国产男女激情 | 亚洲精品69 | 欧美一区二区在线播放 | 日本高清在线观看 | 秋霞三区 | 久久国产精品偷 | 国产精品100 | 中国第一毛片 | 久久久性色精品国产免费观看 | 精品国产乱码久久久 | 亚洲av网址在线 | 午夜中文字幕 | 日本午夜视频 | 欧美无极品 | 国产精品伦一区二区三区免费看 | 久久一区精品 | 99爱国产 | 一级肉体全黄裸片 | 欧美中文字幕视频 | 呦呦视频在线观看 | 91精选 | 丰满岳乱妇在线观看中字无码 | 日韩在线观看免费网站 | 日韩精品成人 | 狠狠躁18三区二区一区传媒剧情 | 性高潮视频在线观看 | 国产精品一区二区毛片 | 五月深爱 | 日韩一区二区三区视频 | 欧美日韩人妻精品一区在线 | 我和我的太阳泰剧在线观看泰剧 | 色婷婷一区二区三区四区 | 亚洲国产伊人 | 国产精品偷伦视频免费观看了 | 日韩第八页 | 蜜桃精品久久久久久久免费影院 | 亚洲人成777 | 欧美一级黄| 精品国产一区二区三区日日嗨 | 日本高清免费aaaaa大片视频 | 中文字幕在线观看视频网站 | 日韩一区二区中文字幕 | 天堂av电影在线观看 | 樱花电影最新免费观看国语版 | 另类小说亚洲色图 |