C语言 | 联合体(union)、typedef

一、联合体union

1.联合体含义

  • 联合 union 是一个能在同一个存储空间存储不同类型数据的类型;
  • 联合体所占的内存长度等于其最长成员的长度倍数,也有叫做共用体;
  • 同一内存段可以用来存放几种不同类型的成员,但每一瞬时只有一种起作用;共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员的值会被覆盖;
  • 共用体变量的地址和它的各成员的地址都是同一地址。

2.联合体与结构体

  • 结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。
  • 结构体占用的内存大于等于所有成员占用的内存的总和(存在偏移对齐),共用体占用的内存等于最长的成员占用的内存。共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。
union MyUnion
{
    int a;
    char b;
    float c;
};
void main()
{
    printf("联合体MyUnion的字节大小为:%d\n", sizeof(union MyUnion));//联合体MyUnion的字节大小为:4
}

二、typedef

  • typedef为 c 语言的关键字,作用是为一种数据类型 ( 基本类型或自定义数据类型 ) 定义一个新名字,不能创建新类型。
  • 与 # define 不同, typedef 仅限于数据类型,而不能是表达式或具体的值;
  •  # define 发生在预处理, typedef 发生在编译阶段。
typedef struct student StructStu;
struct student {
    char* name;
    int age;
    char* address;
};

猜你喜欢

转载自blog.csdn.net/weixin_39766005/article/details/109386101