C语言——自定义类型之联合体

简介: C语言——自定义类型之联合体

前言

一、定义

联合体类型定义的变量包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。

二、内存分配

联合中的成员变量共用同一块内存空间

1.同一个时间只能使用其中一个成员变量

2.改变一个成员变量其他成员变量也会被修改

eg:判断当前机器的大小端字节序

分析大小端不同的字节存储顺序:

利用联合体改变一个成员变量其他成员变量也会被修改的特点,判断大小端:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//判断当前计算机的大小端
int is_little_endian()
{
  union Un
  {
    int a;
    char b;
  };
  union Un i;
  i.a = 1;
  return i.b;
}
int main()
{
  int ret = is_little_endian();
  if (ret == 1)
  {
    printf("小端\n");
  }
  if (ret == 0)
  {
    printf("大端\n");
  }
}

三、联合体的大小

1.联合体的大小至少是最大成员变量的大小,因为联合体至少得有能力保存占内存空间最大的那个成员,但是联合体的大小不一定是最大成员变量的大小

2.如果最大成员变量的大小不是对齐数的整数倍,就要对齐到对齐数的整数倍。

3.举个栗子

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//计算联合体的大小
union Un1
{
  char c[5];
  int i;
};
union Un2
{
  short c[7];
  int i;
};
int main()
{
  printf("%d\n", sizeof(union Un1));
  printf("%d\n", sizeof(union Un2));
  return 0;
}


总结

本文主要介绍了自定义类型中的结构体类型的相关知识,希望这篇文章对你理解结构体有所帮助。

当然本文的内容是作者这个初学者对于这些概念的浅薄理解,如果内容中有任何错误或者你觉得不清楚的点,可以在评论区交流(也可以私信作者)。

如果大家喜欢这篇文章,希望可以支持支持作者。作者也在不断学习,之后也会继续上传自己的学习笔记。


相关文章
|
11天前
|
存储 C语言 C++
深入C语言,发现多样的数据之枚举和联合体
深入C语言,发现多样的数据之枚举和联合体
深入C语言,发现多样的数据之枚举和联合体
|
16天前
|
存储 编译器 Linux
C语言——自定义类型
C语言——自定义类型
|
18天前
|
存储 编译器 Linux
深入理解 C 语言中的联合体
深入理解 C 语言中的联合体
|
19天前
|
存储 编译器 C语言
【C语言】自定义类型:联合与枚举的简明概述
【C语言】自定义类型:联合与枚举的简明概述
|
2月前
|
存储 编译器 C语言
【C语言篇】自定义类型:联合体和枚举详细介绍
像结构体⼀样,联合体也是由⼀个或者多个成员构成,这些成员可以不同的类型。
40 1
|
2月前
|
存储 安全 编译器
C语言自定义类型
C语言自定义类型
31 10
|
4月前
|
编译器 测试技术 C语言
【C语言】:自定义类型:结构体的使用及其内存对齐
【C语言】:自定义类型:结构体的使用及其内存对齐
61 7
|
4月前
|
存储 编译器 C语言
C语言的联合体:一种节省内存的数据结构
C语言的联合体:一种节省内存的数据结构
|
4月前
|
编译器 C语言 C++
【海贼王编程冒险 - C语言海上篇】自定义类型:结构体,枚举,联合怎样定义?如何使用?
【海贼王编程冒险 - C语言海上篇】自定义类型:结构体,枚举,联合怎样定义?如何使用?
31 0
|
4月前
|
编译器 C语言
C语言----自定义类型:联合和枚举
C语言----自定义类型:联合和枚举