C初阶8:联合体

2019-04-05  本文已影响0人  jdzhangxin
  1. 语法
union 联合体类型名 {
    成员
};

用法与struct一样。不同点是所有成员公用相同的内存空间。联合体的sizeof是成员中大小最大的值。

联合体是成员共用内存空间。

例如:

union Test{
    int n;
    double b;
};

printf("%ld\n",sizeof(union Test));
u.b = 0;
u.n = 0;
printf("u.n=%d u.b=%f\n",u.n,u.b);
u.b = M_PI;
printf("u.n=%d u.b=%f\n",u.n,u.b);

绘制下面结构体和联合体的数据布局图。

union UTest{
    int n;
    double b;
};

struct STest{
    int n;
    double b;
};
  1. 示例
    按从低到高的顺序打印出int类型每个字节的对应的数值(十六进制)。请绘制出数据布局图。
union IntByte{
  int n;
  char c[sizeof(int)];
};
union IntByte b;
b.n = 1234;
int i;
printf("%08X\n",b.n);
for(i=0;i<sizeof(int);++i){
    printf("%p\t%02hhX",b.c+i,b.c[i]);
}
printf("\n");
  1. 如何判断一个系统是大端还是小端?
union EndianTest{
    int8_t u[4];
    int32_t i;
};

static bool isLittleEndian(){
    EndianTest et;
    et.i = 1;
    return et.u[0] == 1;
}
上一篇 下一篇

猜你喜欢

热点阅读