Struct:结构体

Union:联合体

联合体是几个不同类型的变量共占一段内存(相互覆盖),因为是内存共享,所以它不能同时存放多个成员的值,而只能存放其中的一个值,就是最后赋予它的值,例如:

uni.a=3,uni.b=4.5,uni.c="A";赋值之后共享的同一块内存的值会被覆盖。对于union的不同成员赋值,将会对其它成员重写,原来成员的值就不存在了。union的内存大小为其内部所有成员的最大值。

unionUN{charc;//1inta;//4floatb;//4doubleg;}uni;voidTest(){uni.a=4;uni.b=1.5;uni.c='f';printf("%d\n",uni.a);printf("%f\n",uni.b);printf("%c\n",uni.c);}intmain(){Test();return0;}

联合体的应用:大小端

#include<stdio.h>unionUN{inti;charj;}a;voidTest(){a.i=1;if(a.j==0){printf("大端\n");}else{printf("小端\n");}}intmain(){Test();return0;}

结构体也是由多个不同的数据类型成员组成,但在任何同一时刻,结构体存放所有的成员变量,结构体的不同成员赋值是相互不影响的,它的内存也是按照最大类型的倍数进行分配大小,但还是与顺序有关。

structstudent{char*name;//4intage;//4char*sex;//4charc;intnum;//4doubleb;}d;voidTest(){structstudents;d.age=12;printf("%d\n",sizeof(d));printf("%d\n",d.age);printf("%s\n",d.sex);}intmain(){Test();return0;}