共同体
结构体:存储多个类型。
共同体:多类型共存,实际只能存储一个类型的变量, 而不是多个变量共存。
union Person {
int age;
char name[256];
char sex[2];
}
// 共同体大小:最大成员, 256的字符数组
struct Person {
int age;
char name[256];
char sex[2];
}
// 结构体大小:所有成员之和 262 = 4 + 256 + 2
枚举
颜色举例
enum COLOR {
red,
blue,
white,
black,
green,
yellow
};
真假举例
#include<stdio.h>
enum BOOL {
FALSE,
TRUE
};
main() {
enum BOOL flag = TRUE;
if(...)
...
}
swap实例:返回值用TRUE, FALSE代替 1, 0
#include<string.h>
#include<windows.h>
#include<stdio.h>
#include<string.h>
enum BOOL {_TRUE = 1, _FALSE1 = 0};
int swap (int *x, int *y) {
int tmp;
tmp = *x;
*x = *y;
*y = tmp;
return _TRUE;
}
void main() {
int i =10, j =15;
int x;
flag = swap (&i, &j);
printf("%d %d \n", i, j);
printf("%d", flag);
Sleep(10000);
}
值得注意的是
enum {TRUE ,FALSE, OTHER} // 会自动分配 0, 1, 2
enum {TRUE = 1 ,FALSE, OTHER} // 会自动分配 1, 2, 3
enum {TRUE = 1 ,FALSE, OTHER = 10, RAND} // 会自动分配 1, 2, 10, 11
typedef 类型定义
通过typedef来定义自己的类型
1 用于 int 类:
typeof int money;
int i = 10;
money m = 200;
printf("int i = %d \nmoney m = %d", i, m);
typedef int money
此时money就是我们定义的类型int,实际上跟int 没差,但能让人更好读懂。
定义的时候类同:
int i = 10;
money m = 200;
printf("int i = %d \n money m = %d", i, m);
2 用于结构体:
// 常见用法
typedef struct {
int hour;
int minute;
int second;
} TIME;
// 原本要:
// struct TIME t1;
// 现在可以直接:
TIME t1;
3 实际应用 枚举:
#include<string.h>
#include<windows.h>
#include<stdio.h>
#include<string.h>
enum BOOL { _TRUE = 1, _FALSE = 0 }; //提前定义一下
enum BOOL swap (int *x, int *y) {
int tmp;
tmp = *x;
*x = *y;
*y = tmp;
return _TRUE; // 运行成功返回真
}
int main() {
int i = 1;
int j = 15;
enum BOOL flag; // 这里需要定义一下flag, 呼应enum BOOL { _TRUE = 1, _FALSE = 0 };
// 不过貌似BOOL flag一样的
flag = swap(&i, &j); // 这里有返回值
if (flag != _FALSE) {
printf("i = %d \j = %d", i, j);
}
Sleep(10000);
}
4 实际应用 枚举 & typedef:
#include<string.h>
#include<windows.h>
#include<stdio.h>
#include<string.h>
typedef enum {
_TRUE = 1, _FALSE = 0
} BOOL;
// 替换了原来的
//enum BOOL { _TRUE = 1, _FALSE = 0 };
BOOL swap (int *x, int *y) {
int tmp;
tmp = *x;
*x = *y;
*y = tmp;
return _TRUE;
}
int main () {
BOOL flag; //替换了原来的 enum BOOL flag
int i = 1;
int j = 15;
flag = swap(&i, &j);
if (flag != _FALSE) {
printf("i = %d, j = %d", i, j);
}
Sleep(10000);
}
5 为什么要用typedef?
常见情况:
1 用#define 宏定义一些常量
2 typedef定义一个替换类型
3 enum来设置一个枚举类型
eg:
typedef int money
多文件编程
代码量大,为了区分功能,需要将不同功能的函数写在不同的文件中
extern 外面的,外来的
extern 声明外部变量
两个文件放在一个工程中
文件1:t1.c
//第一个文件
#include<stdio.h>
extern char text[];
void setText(void); // 这里是对后面函数的声明
int main () {
setText(); // 执行,上面有对这里的声明
printf("%s \n", text);
}
文件2:t2.c
//第二个文件
#include<string.h>
char text[256];
void setText() {
strcpy(text, "hello world");
}
头文件
文件1:t1.c
//第一个文件
#include<stdio.h>
#include"t2.h"
int main () {
setText();
printf("%s \n", text);
}
文件2的头文件:t2.h
//第二个文件
extern char text[];
void setText(void);
文件2:t2.c
//第三个文件
#include<string.h>
char text[256];
void setText() {
strcpy(text, "hello world");
}