mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6
835 字
2 分钟
c04
2025-11-13
c

联合体 UNION#

C 语言编程的时候,需要使集中不同种类的变量存放到同一段内存中。也就是使用覆盖计数,几个变量相互覆盖重叠。这种几个不同的变量共同占用一段内存结构 在C语言中,被称作联合体,也被称作共用体

联合体定义方式#

定义结构体的方式与定义结构体的方式相似

// 1
union foo
{
char s[10];
int i;
} a, b;
// 2
union foo
{
char s[10];
int i;
};
union foo a;
// 3
typedef union
{
char s[10];
int i;
} foo;
foo a;
// 4
typedef union _foo
{
char s[10];
int i;
} foo, *pfoo

联合体占用空间实例:#

union_img

联合体与结构体的区别#

  1. 结构体和联合体都是有多个不同的数据类型成员组成的,但是在任意时刻,共用体只存放了一个被选中的成员,而结构体的所有成员都存在
  2. 对于联合体的不同成员赋值,将会对其他成员重写,原来成员的值就不存在了,而对于结构体的不同成员赋值是互不影响的
  3. 结构体可以含有union成员,而union里也可以含有结构体成员
  4. 结构体: 先后存放数据成员, ; 联合体: 并排存放数据成员

枚举#

当一个变量的值被限于列出来的值得范围内,那么这个变量就可以被点以为一个枚举类型的变量。比如一个星期有七天,每一天,都是确定的;一年有12个月,每个月也是确定的。假如用一个变量来白哦是一个星期的一天,或者一年的某个月,用其他的类型都不是很恰当。于是C语言就引入了一个枚举类型

定义形式#

typedef enum _enumName
{
One, // 如果不指定默认第一个为0 后续依次加1
Two,
Three,
...
} enumName, *penumName;
enumName a;

注意:枚举值本身是一个常量,他的值不能被改变

位运算#

在程序的数据内存中,都是以二进制的形式存在的。所以,内存中的数据一般都是0,1组成的序列。所谓位运算就是直接都整数在内存中的二进制进行位运算操作

  • & 与运算 全1出1 有0出0
  • | 或运算 有1出1
  • ^ 异或运算 01 出 1 11 00 出0
  • ~ 取反 将所有2进制位取反
  • >> 左移 将一个数左移n 相当于将这个数x: x×2nx \times 2^n
  • << 右移 将一个数右移n 相当于将这个数x: x×2nx \times 2^{-n}

宏定义#

宏不是对象不占用内存,在编译器预处理阶段处理

#define#

#define PI 3.14
#ifndef __FILE_C_INCLUDE__
#define __FILE_C_INCLUDE__
...
#endif
#define MAX(a, b) ((a) > (b) ? (a) : (b))

宏的注意事项#

  1. 宏名一般是用大写
  2. 使用宏的目的是提升程序的可读性和可维护性
  3. 预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查
  4. 宏定义末尾不加分号
  5. 宏定义通常在文件的开头写在函数花括号外边,作用域为其后的程序
  6. 宏定义允许嵌套
  7. 字符串中永远不包含宏
  8. 宏定义不分配内存,变量定义分配内存
  9. 宏定义不存在类型问题,他的参数也是无类型的
  10. 宏不能替换程序字符串中的东西

条件编译#

#ifdef XXX
...
#else
...
#endif
#define XXX 1
#if XXX // 常量表达式
...
#endif
分享

如果这篇文章对你有帮助,欢迎分享给更多人!

c04
https://yoyolp.github.io/posts/c_asm/c04/
作者
超级玉米人
发布于
2025-11-13
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录