共用体和结构体
编译器会为结构体变量中的每个数据成员分配不同的地址空间,也就是说,结构体变量中的数据程序是并列关系,而编译器为共用体变量中的数据成员分配的是同一块内存,每个时刻只有一个数据成员有意义,从地址的角度来看两者的差异,形象地表明了这一点 #include <stdio.h> #include <stdlib.h> #include <string.h> //初始化方式和结构体类似 union data{ //类似于结构体变量,共享内存,共用体的大小等于最长的那一段,共用体变量在任何时刻只有一个成员变量存在,定义的时候不能初始化,只有在创建的时候才能初始化 int price; char brand[20]; }d1, d2, *pData, data[10]; union key{ //共用体会存在字节数填充,直到可以被最小类型字节数整除,double有8个字节,a数组有9个,再填充7个字节,恰好被double整除 //内存对齐的方式,分别CPU寻址 double d; char a[9]; } k; //sizeof(k) =16 void main(){ printf("%d\n", sizeof(d1)); //20 d1.price = 100; strcpy(d1.brand,"IBM"); d2 =d1; //共用体变量可以直接赋值 printf("%d,%s\n",d1