首页 > 编程知识 正文

union怎么使用方法,union成员有谁

时间:2023-05-05 13:04:58 阅读:143884 作者:4659

组合(union )的声明和结构与结构体相似,但本质不同。 的所有成员都引用了内存中的同一位置。 单身的爆米花,想在不同的时间把不同的东西保存在同一个地方的时候,可以使用组合。

结构(struct )的所有变量为“共存”的——的优点是“有容乃大”,是全面的; 缺点是结构内存空间分配粗放,无论是否使用,都是全分配。

另一方面,在联合体(union )中各变量为“互斥”的——的缺点是“包容”不够。 但是,内存的使用更加细致灵活,具有还可以节约内存空间的优点。

简单的程序分析

#include 'stdio.h' 2 union{ 3 int a; 4浮动b; 5 char c; 6 ) x; 7intmain(8)8 { 9 x.c='x '; 10 x.b=3.14; 11 x.a=25; 12printf((g(t ) c ) t ) d(t ) n )、x.b、x.c、x.a ); 13返回0; 14 )输出结果为3.50325e-44垃圾值25

只知道最后的x.a=25; x.b复盖x.c的地址,x.a复盖x.b的地址,所以前两个打印是垃圾值,只有最后一个打印是正确的。

程序分析2

# include stdio.hunionvar { longintl; int i; (; main () { union var v; v.l=5; printf(V.Lis%D(N ),v.i ); v.i=6; printf(nowv.Lis%LD! the address is %pn ',v.l,v.l; printf(nowv.Iis%d! the address is %pn ',v.i,v.i; (结果) v.l is 5 now v.l is 6! theaddressis0x BF ad1 e2cno wv.IIS 6! the address is0xbfad1e2c

程序分析3

#includestdio.h union u{ int i; 双精度d; //这个union有8字节的大小}; main () { union u ttdxg; ttdxg.i=10; printf(%d(n ),ttdxg.i ); char * c; c=(char* ) ttdxg; 代入union的起始地址,输入char类型c[0]='a '; c[1]='b '; c[2]='c '; c[3]=' '; c[4]='d '; c[5]='e '; //最大c[7]printf('%sn”,c ); //使用结束符' '将字符串' ABC'printf(%c%c%c%c%c(c(n ),c(1),c (2),c(3),c (4),c )

输出功率

10

哥伦比亚广播公司

a b c d e

printf(%s(n ),c ); //用终端符号" "打印字符串" abc "字符串以" "结束,所以之后不打印

程序分析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; i2; I ) printf (输入名称,age,jobanddepartment(n ) ); scanf('%s%d%c )、body[i].name、body[i].age、body[i].job ); if(body[I].job=='s ' ) ) Scanf )、body[i].depa.class ); ELSEscanf('%s ',body[i].depa.office ); } printf (name (tagejobclass/office (n ); for(I=0; i2; I ) if(body[I].job=='s ' ) (printf ) ) %st=<; %dn ),body[i].name,body[i].age,body[I] )。 elseprintf('%s(t=<; %s(n ),body[i].name,body[i].age,body[i].job,body[i].depa.office }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。