• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

C语言 联合(union)用法案例详解

c语言 搞代码 4年前 (2022-01-06) 42次浏览 已收录 0个评论

这篇文章主要介绍了C语言 联合(union)用法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

联合(union)的声明和结构与结构体类似,但是本质不同。

   联合的所有成员引用的是内存中的相同位置。当你想在不同时刻把不同的东西存储于同一位置时,就可以使用联合。

  构体(struct)中所有变量是“共存”的――优点是“有容乃大”,全面;缺点是struct内存空间的分配是粗放的,不管用不用,全分配。

  而联合体(union)中是各变量是“互斥”的――缺点就是不够“包容”;但优点是内存使用更为精细灵活,也节省了内存空间。

一个简单程序的分析

 #include "stdio.h" union{ int a; float b; char c; }x; int main() { x.c='x'; x.b=3.14; x.a=25; printf("%g \t%c \t %d\t\n",x.b,x.c,x.a); return 0; }

输出结果为 3.50325e-44       垃圾值     25 

可以看出  只有最后一个x.a=25; 因为x.b会把x.c的地址覆盖x.a会把x.b的地址覆盖  所以前两个打印的都是垃圾值只有最后一个打印正确。

  程序分析2

 #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

 #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]); }  

输出

10
abc
a b c  d e

 printf<em style="color:transparent">来源[email protected]搞@^&代*@码网</em>("%s\n",c);//利用结束符'\0'打印字符串"abc" 字符串以‘\0'结束所以后面未打印

程序分析4

 main() { struct { char name[10]; int age; char job; union { int class; char office[10]; } depa; }body[2];   int n,i; for(i=0;i<2;i++) { printf("input name,age,job and department\n"); scanf("%s %d %c",body[i].name,&body[i].age,&body[i].job); if(body[i].job=='s') scanf("%d",&body[i].depa.class); else scanf("%s",body[i].depa.office); } printf("name\tage job class/office\n"); for(i=0;i<2;i++) { if(body[i].job=='s') printf("%s\t%3d %3c %d\n",body[i].name,body[i].age ,body[i].job,body[i].depa.class); else printf("%s\t%3d %3c %s\n",body[i].name,body[i].age, body[i].job,body[i].depa.office); } }

到此这篇关于C语言 联合(union)用法案例详解的文章就介绍到这了,更多相关C语言 联合(union)用法内容请搜索gaodaima搞代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持gaodaima搞代码网

以上就是C语言 联合(union)用法案例详解的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:C语言 联合(union)用法案例详解

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址