1.结构体
1.1 为什么需要结构体?
没有结构体之前,在C语言中,数据的组织依靠 变量+数组,最初最简单的时候,只需要使用基本数据类(int,char,float,double) 来定义单个变量,需要几个变量就定义几个变量,后来情况变复杂了,有时候需要很多意义相关的变量,这个时候数组出现了,数组解决了需要很多类型相同,意义相关变量的问题,但是数组是有限的,数组最大的不足在于,一个数组只能存储很多类型相关的变量
使用一个数据结构来保存一个学生所以的信息:姓名,学号,性别这时候需要结构体
1.2 什么是结构体?
结构体是一种里面包含很多种元素,这些元素的数据类型可以相同,也可以不同,所以结构体是一种数据封装的方法
新增关键字 struct ,是struct定义结构体
定义了一个Student结构体
注:结构体类型的定义实在函数的外面,结构体定义的是一个新的组合类型,而不是变量,不会消耗内存,在需要定义的地方,再使用结构体类型定义变量
struct Student{
char name[20];//学生姓名
unsigned int num;//学号
int isMale;//性别
}
int main(void){
//定义了一个结构体变量
struct Student s1;
//给结构体进行赋值
s1.name='jiaojiao';
s1.num=110200;
s1.isMale=1;
return 0;
}
1.3数据结构:把庞大复杂的数据用一定的方法组织起来,便于操作(查找,增加,删除)等,这叫做数据结构
结构体和数组的关联,数组是一种特殊的结构体,特殊之处在于封装内的各个元素类型是相同的。结构体各个元素类型可以是不同的
1.4使用结构体步骤
1.4.1定义结构体,定义结构体需要在全局里定义
struct Student {
char name[20];//学生姓名
unsigned int num;//学号
int isMale;//性别
}
1.4.2.使用结构体 ,使用的是结构的体的各个元素,而不是结构体本身
struct Student s1;
s1.name='jiaojiao';
s1.num=110200;
s1.isMale=1;
1.4.3.结构体初始化
1.4.3.1 完成初始化
{xxx,xxx,xx,x,x}
第二种不完全初始化,如果某个元素没初始化,值是随机的
{
.a=xx,
.b=xx,
.c=xx
}
2.共用体
共用体,共用体内只有一个东西,只是它被好几个名字(或者类型)公用
共用体定义和结构体定义一样,使用也一样,只是关键字不一样
Union
2.1定义共用体
2.2使用共用体步骤
2.2.1第一步定义共用体类型
union myUnion
{
int a;
char b;
float c;
}
2.2.2使用公用体
int main(void){
union myUnion u1;
u1.a=124;
printf("u1.a = %d,u1.b = %d",u1.a,ui.b)
}
2.3结构体和公用体组合使用
#include <stdio.h>
struct Male{
int age;
char name[20];
int basketball;
}
struct Female{
int age;
char name[20];
int aerobics;
}
union student{
struct Male m;
struct Female f;
}
int main(void){
union student s[30];
s[0].m.basketball = 47;
s[1].m. aerobics = 44;
}
3.枚举
#include <stdio.h>
enum week {
SUN,
MON,
TUE,
WEN,
THU,
FRI,
SAT
}
int main(void){
enum week today;
today=SAT
switch(today){
case Mon:
printf("今天星期一");
defaut:
printf("今天不是星期一");
}
}
4.宏定义
#define N 321
#define PI 3.14
#define S(r) (PI * (r) * (r))
#define Sen_year (365 * 24 * 60 * 60)UL //把这个数转为一个 unsigned long
宏定义必须定义在全局里
宏定义必须先定义再使用,否则会报错
宏定义名一般是大写(这个不是语法定义的,一般约成的)
宏定义的式子必须用()括号括起来
为什么使用宏定义
在C语言中,一般使用常数时候,都是不直接使用,而是把该常数定义个宏,然后在程序中使用宏,这样的好处是,等我们需要修改这个常数时,只需要在宏定义处修改一次即可
5.预处理
网友评论