union
union类似于结构,
联合成员使用同一片内存,union的所占字节数与最大成员相同
同一时间只有一个成员有效,所以初始化联合变量时只初始化第一个成员
#include<stdio.h>
union number{
long long i;
char s[sizeof(int)];
};
int main()
{
long long j;
union number a;
union number *p=&a;
printf("sizeof(j)=%d\n",sizeof(j)); //sizeof(j)=8
printf("sizeof(a)=%d\n",sizeof(a)); //sizeof(a)=8
printf("sizeof(union number)=%d\n",sizeof(union number)); //sizeof(union number)=8
printf("&(a.i)=%p\n",&(a.i)); //&(a.i)=000000000062FE10
printf("&(a.s)=%p\n",&(a.s)); //&(a.s)=000000000062FE10
return 0;
}
使用union读取变量内存
#include<stdio.h>
union number{
int i;
char s[sizeof(int)];
};
int main()
{
union number a={.i=9265}; //9265 =0X2431
int k;
for(k=0;k<sizeof(int);k++){
printf("%02X ",a.s[k]);//每个字符按2个十六进制方式输出
} //31 24 00 00
return 0;
}
小端输出实例(X86处理器)
9265 = 0X2431
猜测输出为:00 00 24 31
实际输出为:31 24 00 00