835 字
2 分钟
c04
联合体 UNION
C 语言编程的时候,需要使集中不同种类的变量存放到同一段内存中。也就是使用覆盖计数,几个变量相互覆盖重叠。这种几个不同的变量共同占用一段内存结构 在C语言中,被称作联合体,也被称作共用体
联合体定义方式
定义结构体的方式与定义结构体的方式相似
// 1union foo{ char s[10]; int i;} a, b;// 2union foo{ char s[10]; int i;};
union foo a;// 3typedef union{ char s[10]; int i;} foo;
foo a;// 4typedef union _foo{ char s[10]; int i;} foo, *pfoo联合体占用空间实例:

联合体与结构体的区别
- 结构体和联合体都是有多个不同的数据类型成员组成的,但是在任意时刻,共用体只存放了一个被选中的成员,而结构体的所有成员都存在
- 对于联合体的不同成员赋值,将会对其他成员重写,原来成员的值就不存在了,而对于结构体的不同成员赋值是互不影响的
- 结构体可以含有union成员,而union里也可以含有结构体成员
- 结构体: 先后存放数据成员, ; 联合体: 并排存放数据成员
枚举
当一个变量的值被限于列出来的值得范围内,那么这个变量就可以被点以为一个枚举类型的变量。比如一个星期有七天,每一天,都是确定的;一年有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:
- << 右移 将一个数右移n 相当于将这个数x:
宏定义
宏不是对象不占用内存,在编译器预处理阶段处理
#define
#define PI 3.14
#ifndef __FILE_C_INCLUDE__#define __FILE_C_INCLUDE__...#endif
#define MAX(a, b) ((a) > (b) ? (a) : (b))宏的注意事项
- 宏名一般是用大写
- 使用宏的目的是提升程序的可读性和可维护性
- 预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查
- 宏定义末尾不加分号
- 宏定义通常在文件的开头写在函数花括号外边,作用域为其后的程序
- 宏定义允许嵌套
- 字符串中永远不包含宏
- 宏定义不分配内存,变量定义分配内存
- 宏定义不存在类型问题,他的参数也是无类型的
- 宏不能替换程序字符串中的东西
条件编译
#ifdef XXX...#else...#endif
#define XXX 1#if XXX // 常量表达式...#endif 分享
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时
相关文章 智能推荐










