概述
知识点:
1.结构体 struct
2.联合体 union
3.枚举
4.结构、联合与函数
===========================
结构体
思考:如果现在希望保存一个学生的信息,该如何保存
sprintf "zhangsan:18:180”
%s:%d:%d, name, height, age
char name[10][100]
int age[10]
int height[10]
1.什么是结构体 struct
结构体指的是一种数据结构,是c语言中复合数据类型的一
种多种不同数据类型的集合
2.结构体的作用
结构体可以用来创建复杂的数据结构
3.结构体的定义
1)定义的语法!!
4.结构体成员声明
1)可以声明各种类型的成员
2)成员声明时需要注意的地方
练习:
struct
1.定义一个结构体,用来描述时间,
具体说该结构体有三个成员,分别描述时分秒信息
2.定义一个结构体,用来描述书本的信息,
结构体成员包括名称,单价,作者,出版社
author
price
publish
5.声明结构体类型变量和初始化
. 非指针
-> 指针
6.结构体成员的访问方式
练习:
1.初始化并输出时间结构体的信息
2.初始化并输出书本结构体的信息
3.从终端输入书本的信息,并且输出
7.结构体数组
练习:
1.2本书的名称等信息,然后按照每行一本书的信息输出
2.建立包含2个学生信息的登记表,其中包括学号,姓名,性别,住址和3门成绩
8.结构体指针变量
1)指向结构体变量的指针
int *p;
struct stu *p;
9.结构体的嵌套和指针成员
1)结构体中嵌套结构体
2)结构体中的成员为一个指针变量
10.结构体和函数
1)思考:结构体在函数传递时是否会和数组一样进行地址传递
2)结构体的参数传递方式,值传递和地址传递
练习:
0.实现一个函数,作用为输入某个学生的学生信息
scanf("%d", &s->id);
1.实现一个函数,作用为输出某个学生的学生信息
2.实现一个函数,作用为遍历所有的学生信息
11.结构体的大小和内存对齐
1)思考:为什么会出现相同机构体,大小不同的情况
2)原因:大致可以分为2点
1>平台原因(移植):不是所有的硬件平台都能访问任意
地址上的任意数据
2>性能原因:经过内存对齐后,cpu的内存访问速度大大
提升
3)对齐方式
1>和编译器有关,一般32位系统默认以4个字节方式对齐
2>本系统以结构体中最大元素的类型进行对齐
===========================
联合体
ip协议
192.168.1.1
fe80::72cd:60ff:fe38:308%en0
union{
struct ipv4{
//...
};
struct ipv6{
//...
};
};
1.什么是联合体 union
1)共享存储空间
2)同时只能使用某一种数据类型
char
int
double
2.作用
1)当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体
3.联合体的定义
//和结构体操作一致
4.联合体成员声明
5.联合体类型变量
6.联合体大小
7.联合体成员输入和输出
===========================
枚举
enum size{S,M,L}
S = 0
M = 1
L = 2
1.什么是枚举 enum
所谓枚举是指将变量的值一一列举出来,变量只限于列举出来的值的范围内取值。
2.枚举的作用
关心的不是它的值的大小,而是其表示的状态
3.枚举变量的声明
4.枚举变量的初始化和输入输出
5.枚举的本质
1)用标识符表示的整数常量集合
2)枚举元素不是变量,而是常量,因此枚举元素又称为枚举常量。
因为是常量,所以不能对枚举元素进行赋值。
3)枚举元素作为常量,它们是有值的,C 语言在编译时按定义的顺序使它们的值为,1,2,…。
练习:
1.定义一个表示衣服码数的枚举集合
2.让用户选择码数,然后输出该码数
6.使用枚举需要注意的地方
1)在一个程序中不允许出现同名的枚举类型
2)在一个程序中不允许出现同名的枚举常量
===========================
字符串总结:
知识点:
1.字符和字符处理函数
2.字符串的本质和字符串输入输出函数
3.字符串转换函数
4.常用字符串处理函数
5.字符串查找函数
6.字符串分割函数
7.字符串替换
8.常用字符串处理函数实现
9.sscanf函数
=================================
字符和字符处理
1.复习ascii码
'0'~'9' 'a'~'z' 'A'~'Z'
48 97 65
2.字符的本质
思考:sizeof(char) 和sizeof('a')
1)字符的本质为一个int类型的ascii码
2)字符变量保存的是ascii码,但是ascii码只需要一个字节即可保存
3.使用字符判断函数
isdigit 数字字符
isalpha 字母(大小写)
isalnum 数字字符和字母
islower 小写字母
isupper 大写字母
isspace 空格字符
0 --表示测试不成立
1 --表示测试成立
练习:
1.用户输入一个字符串,统计其中数字,字母,空格的个数
2.分别统计出大小写字母的个数
4.使用字符转换函数
tolower 大写转换为小写
int tolower(int c)
toupper 小写转换为大写
int toupper(int c)
练习:
1.将用户输入的字符串中的大写字母转换为小写字母
2.将用户输入的字符串中的数字 小写字母全部转换为*号
3.将用户输入的字符串中的其他字符转换为?号
其他字符不包括数字,字母,空格
Hell+ world
Hell? world
=================================
字符串
char s1[100] = "hello world";
char *s2 = "hello world";
0.字符串
不以字符数组引用时为一个常量
//栈
char str[] = "hello";
char str[12] = {'h', 'e','l','l', 'o','