C语言-自定义类型3

简介: C语言-自定义类型3

联合体

联合体的定义

联合体是一种特殊的自定义类型,这种类型定义的变量也包含着许多成员(类型可以不同),特点是这些成员共用着同一块内存空间。

例如:

union My       //定义联合体类型
{
  char c;
  int i;
};
union My   un;    //定义联合体变量
int main()
{
  printf("%zd\n", sizeof(un));     //计算联合体变量大小
  return 0;
}

联合体的特点

联合体的成员是共用同一块内存空间的,即联合体的大小至少是最大成员的大小。

union Un
{
  char a;
  int i;
}un;
int main()
{
  printf("%p\n", &(un.a));    //查看一下两个成员的地址
  printf("%p\n", &(un.i));
  return 0;
}

由此也验证了,它门共用的是同一块内存空间。

联合体大小的计算

  • 联合体大小至少是最大成员的大小
  • 当最大成员的大小不是最大对齐数的整数倍时,就要对齐到最大对齐数的整数倍。
    例如:
union Un1
{
  char c[5];     //最大成员是5,最大对齐数是四,所以对齐到8
  int i;
};
union Un2
{
  short c[7];      //最大成员是14,最大对齐数是4,所以对齐到16
  int i;
};
int main()
{
  printf("%zd\n", sizeof(union Un1));
  printf("%zd\n", sizeof(union Un2));
  return 0;
}

使用案例

int daxiao()
{
  union Un
  {
    char a;     //一个字节
    int i;      //四个字节
  }un;
  un.i = 1;
  return un.a;
}
int main()
{
  int ret = daxiao();
  if (ret)
    printf("小端");
  else
    printf("大端");
  return 0;
}

读取的第一个字节是一就是小端存储,是0就是大端存储。


相关文章
|
2月前
|
安全 编译器 Linux
【c语言】轻松拿捏自定义类型
本文介绍了C语言中的三种自定义类型:结构体、联合体和枚举类型。结构体可以包含多个不同类型的成员,支持自引用和内存对齐。联合体的所有成员共享同一块内存,适用于判断机器的大小端。枚举类型用于列举固定值,增加代码的可读性和安全性。文中详细讲解了每种类型的声明、特点和使用方法,并提供了示例代码。
27 3
|
2月前
|
存储 编译器 Linux
C语言——自定义类型
C语言——自定义类型
|
2月前
|
存储 编译器 C语言
【C语言】自定义类型:联合与枚举的简明概述
【C语言】自定义类型:联合与枚举的简明概述
|
4月前
|
存储 安全 编译器
C语言自定义类型
C语言自定义类型
35 10
|
4月前
|
存储 编译器 C语言
【C语言篇】自定义类型:联合体和枚举详细介绍
像结构体⼀样,联合体也是由⼀个或者多个成员构成,这些成员可以不同的类型。
48 1
|
6月前
|
编译器 测试技术 C语言
【C语言】:自定义类型:结构体的使用及其内存对齐
【C语言】:自定义类型:结构体的使用及其内存对齐
76 7
TU^
|
6月前
|
编译器 C语言 C++
C语言之自定义类型
C语言之自定义类型
TU^
43 2
|
6月前
|
编译器 C语言 C++
【C语言基础】:自定义类型(二) -->联合和枚举
【C语言基础】:自定义类型(二) -->联合和枚举
|
6月前
|
编译器 C语言
【C语言基础】:自定义类型(一)--> 结构体-2
【C语言基础】:自定义类型(一)--> 结构体
|
6月前
|
编译器 Linux C语言
【C语言基础】:自定义类型(一)--> 结构体-1
【C语言基础】:自定义类型(一)--> 结构体