C语 结构体 共用体 检举类型

2019年12月09日 99 字 C语

C语学习笔记

结构体

  • 概念: 结构体是一种可以由自己定义的数据类型
  • 结构体可以定义成全局变量也可以定义在函数里面成局部变量
  • 先声明, 再定义

结构体的定义:


1
2
3
4
5
struct 结构体名{
数据类型 成员变量名1; // 成员列表
数据类型 成员变量名2; // 成员列表
数据类型 成员变量名3; // 成员列表
}

在声明类型的同时定义变量

1
2
3
4
5
struct 结构体名{ 
数据类型 成员变量名1;
数据类型 成员变量名2;
数据类型 成员变量名3;
}变量名列表;

省略结构体名, 直接定义结构体变量

  • 注意: 只能定义一次, 接下来不能再定义结构体变量
1
2
3
4
5
struct {
数据类型 成员变量名1;
数据类型 成员变量名2;
数据类型 成员变量名3;
}变量名列表;

结构体变量也可以定义数组

1
2
3
4
5
6
7
struct 结构体名{ 
数据类型 成员变量名1;
数据类型 数组变量名2 [ 数组 ];
数据类型 成员变量名3;
};

struct 结构体名 变量名 = { 成员1, { 数组1, 数组2, 数组3 }, 成员3 }

结构体的普通变量 通过 . 来访问成员
结构体的指针变量 通过 -> 来访问成员

  • 给变量类型别名
1
2
3
4
// #define 别名 要替换的数 (作用类似于)
typedef 数据类型 别名; // 区别 typedef 要声明数据类型 而 #define 不用

别名 变量名 = 赋值;

结构体数组

1
2
3
4
5
6
7
8
9
10
typedef 数据类型 名称;   
{
数据类型1 变量名1;
数据类型2 变量名2;
数据类型3 变量名3;
}别名;

// 然后再调用

别名 要声明的变量 [数组];

结合一起

1
2
3
4
5
typedef struct 结构体名{
数据类型 成员变量名1;
数据类型 成员变量名2;
数据类型 成员变量名3;
}别名; // 定义别名后, 原先的结构体名称也可以用

结构体指针

1
2
3
4
5
数据名 *指针 = &地址;

printf("%s\n", b->成员)
// 或者
printf("%s\n", (*b).成员)

注意: 访问成员用 . 点号

共用体

结构体和共用体的区别: 共用体可以共用内存, 结构体不行

共用体:


graph LR A[(" 共用体 ")]-->B[" 变量名1
变量名2
变量名3 "]

结构体:


graph LR A[(" 结构体 ")]-->B[" 变量名1"] A[(" 结构体 ")]-->C[" 变量名2"] A[(" 结构体 ")]-->D[" 变量名3"]

共用体的定义:


1
2
3
4
union 共用体名
{
成员列表
};

枚举类型

  • 枚举类型作用就是美化代码, 让代码由复杂到简单

枚举类型的定义:


1
2
3
4
enum 标识名
{
枚举项0, 枚举项1, 枚举项2;
};

注意: 枚举项没赋值的情况下是从 0 开始, 赋值之后是从 赋值的那个值往后 依次加 1


本文作者: 史迪奇
本文链接: https://sdq3.ml/C-struct-union-enum.html