【C】Re10 共用体、枚举、类型定义
Union 联合体\共用体
结合体:
每个成员的内存空间都是独立存在的,互不干涉
int 成员、double 成员、char 成员 = 4 + 8 + 1 【13字节大小】 取成员字节占用之和作为这个结构体的大小
联合体:
每个成员的内存空间在一起共用
int 成员、double 成员、char 成员 = 8 > 4 > 1 【8字节大小】 取成员最大字节占用类型作为这个共用体的大小
#include <stdio.h> #include <stdlib.h> #include <string.h> union U { int a; short b; char c; }; void test() { printf("union U size -> %llu\n", sizeof(union U)); union U u = { // 共用体只有占用字节大的那个数据类型获取,小类型会被覆盖 100, 20, 30 }; printf("sum -> %d\n", u.a + u.b + u.c); // 100 + 100 + 100 } void test2() { union U u = { // 所有的成员变量最后都会指向最大字节占用的成员属性 100, 20, 30 }; u.a = 20; printf("sum -> %d\n", u.a + u.b + u.c); u.b = 30; printf("sum -> %d\n", u.a + u.b + u.c); u.c = 40; printf("sum -> %d\n", u.a + u.b + u.c); } int main() { test2(); return 0; }
Enumeration 枚举
#include <stdio.h> #include <stdlib.h> #include <string.h> enum Season { Spring, Summer, Autumn, Winter }; enum boolean { false = 0, true = 1 }; int main() { enum boolean isTrue = true; if (isTrue) { printf("yes is true"); } return 0; }
TypeDef的使用
给数据类型起一个别名
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef int integer ; // 基本数据类型别名 struct S { int aaa; char bbb; }; typedef struct S sss ; // 结构体数据类型别名 void typedefUsage() { int aaa = 100; integer aa = 100; } typedef int * integerPointer ; // 适合给指针类型起别名 typedef char * characterPointer ; int main() { return 0; }