没有合适的资源?快使用搜索试试~ 我知道了~
C语言重点知识总结梳理
需积分: 0 27 下载量 81 浏览量
2023-02-13
09:05:46
上传
评论 3
收藏 255KB PDF 举报
温馨提示
试读
1页
纯手撕,如有问题欢迎指正: 思维导图解析: 从C语言初阶讲解到C语言进阶。 在C语言初阶: 1. 初识C语言 C语言的基本语法: 2. C语言分支与循环 3. C语言函数 4. C语言数组 两个小项目: 5. C语言实现三子棋 6. C语言实现扫雷 了解C语言更多细节: 7. C语言操作符 学习指针: 8. C语言指针初阶 学习结构体: 9. C语言结构体 C语言进阶: 数据的存储方式: 10. C语言整形的存储方式 11. C语言浮点型的存储方式 指针进阶: 12. C语言指针进阶 应用: 13. C语言实现计算器 14. C语言模拟实现qsort函数 练习: 15. C语言指针面试 16. C语言字符串与内存函数 C语言自定义类型: 17. C语言自定义类型-结构体 应用: 18. C语言实现通讯录 19. C语言自定义类型-枚举和联合 动态内存分配: 20. C语言动态内存分配 21. C语言柔性数组 应用: 22. C语言动态通讯录改造 文件操作相关的知识: 23. C语言文件操作 应用: 24. C语言文件改造通讯录 最后: 25. C语言程序环境 26. C语言预处理
资源推荐
资源详情
资源评论
C语言
初阶
初识C语言
第一个C程序
数据类型
变量
局部变量
全局变量
尽量少用
别乱定义在头文件
常量
常量无法被改变
#define
枚举常量
字符串与转义字符
字符串自带斜杠零
如果在数组中用字符拼接成字符串 没有斜杠零
转义字符
\
等等...
注释
选择语句
if else语句
switch case语句
循环语句
while
for
函数
数组
操作符
常见关键字
指针 指针就是地址
结构体 自定义类型
分支与循环语句
分支语句
if( ) ; else if( ) ; else ; else 与最近的if 匹配
switch
case
break
default
循环语句
while
for
do while 进来先执行一次
循环语句中的
break 跳出循环
continue 跳到循环开头(判断的地方)
猜数字游戏 生成随机数
通过时间戳设置 srand((unsigned int)time(NULL))
根据需要生成 int ret = rand() % 100 + 1
goto
goto thisway
thisway:
注:这个thisway 是自己命名的
函数
库函数 可以用cplusplus.com 学习
自定义函数
函数参数
实参 传给函数的参数
形参 函数接收我们传过去的参数的参数
函数调用
传值调用
传址调用
函数嵌套
链式访问
函数声明与定义
声明
放在函数使用之前
一般放头文件
定义
函数的具体实现
变量也是类似的规则
函数递归
数组
一维数组
创建
类型 数组名[常量]
C99标准支持边长数组
初始化
完全初始化
不完全初始化 剩下的元素补零
存储 在内存中连续存放
二维数组
创建 类型 数组名[行数][列数]
初始化 行可以省略,列不能
存储 在内存中连续存放
数组作为函数参数
数组名是首元素地址 特殊情况除外
传数组名给函数,例:
用int arr[ ] 接收
用int* arr 接收
用int arr[ ][ ]接收
应用
三子棋
扫雷
操作符
算数操作符
+
-
*
/ 执行整数除法,舍掉余数
% a%b,就是求a/b的余数
移位操作符
<< 左边抛弃,右边补零 可以看做乘2
>> 右边抛弃,左边补零 可以看做除2
位操作符
&(按位与) 有零则零,全1才1
|(按位或) 有1则1,全零才零
^(按位异或) 相同为零,相异为1
赋值操作符 举一个例子 += 其他运算符规则相同
单目操作符
!(逻辑反操作)
+(正值)(没什么用)
-(负值)
&(取地址)
sizeof(操作数的类型长度) 单位:字节 sizeof(数组名) 这里的数组名表示整个数组
~(对一个数二进制按位取反)
++(前置或后置++)
--(前置或后置--)
(类型)(强制类型转换)
关系操作符
>
>=
<
<=
!=
==
逻辑操作符
&&(逻辑或) a&&b(全真才真)
||(逻辑与) a||b(一个真就真)
条件操作符 exp1 ? exp2 : exp3 例: (a > b ? a : b)(如果a>b则取a,否则取b)
逗号表达式
用逗号隔开的多个表达式
从左向右依次执行
整个表达式的结果是最后一个表达式的结果
隐式类型转换
操作符的属性
操作符的优先级
操作符的结合性
是否控制求值顺序
指针初阶
指针
指针就是地址
指针的大小(4/8)个字节
指针的解引用 根据类型确定访问空间的字节数
野指针
指针未初始化
指针越界访问
建议使用指针前检查其有效性
指针运算
指针+-整数 根据类型跳过字节数
指针-指针 指针相减的值是两个指针之间的元素个数
指针++ 跳过类型字节数
二级指针 指向一级指针
指针数组 数组元素是指针
结构体
结构体成员类型 不限
结构体变量
声明
定义
初始化
结构体成员的访问
结构体变量.成员变量名
结构体指针->成员变量名
结构体传参
进阶
数据的存储
数据的基本归类
类型的意义 创建类型时开辟空间
整形家族
char
short
int
long
浮点型家族
float
double
构造类型
数组类型
结构体类型 struct
枚举类型 enum
联合类型 union
指针类型
空类型
整形的存储 存储方式
数据的存储
原码 数值的二进制
反码 符号位不变,其他位按位取反
补码 反码+1 内存中存的是补码
正数的原、反、补码都相同
符号位都是用零表示“正”,用1表示“负”
另外,char 类型大小是: -127~128
大小端存储
大端 以字节为单位顺序存储
小端 以字节为单位逆序存储
大小端模式的定义
大端模式 数据的低位保存在内存的高地址 数据的高位保存在内存的低地址
小端模式 数据的低位保存在内存的低地址 数据的高位保存在内存的高地址
浮点数的存储 存储规则
(-1)^S * M * 2^E
(-1)^S表示符号位
当S=0,V为正数;
当S=1,V为负数。
M表示有效数字,大于等于1,小于2。
2^E表示指数位
IEEE 754规定
32位的浮点数
最高的1位是符号位s
接着的8位是指数E
剩下的23位为有效数字M
64位的浮点数
最高的1位是符号位S
接着的11位是指数E
剩下的52位为有效数字M
特殊规则
存入内存时E的真实值须加上一个中间数
单精度时加127
双精度时加1023
等等...
指针进阶
字符指针
指针数组
数组指针
定义 数组的指针
&数组名与数组名
&数组名是取出整个数组
数组名是首元素地址
数组指针的使用 可用于接收二维数组传参
数组与指针传参 怎么传就怎么接收
函数指针 指向函数的指针
函数名本身也是函数地址
所以函数指针与函数名含义相同
函数指针数组
数组的每个元素都是函数指针
应用 计算器(解决代码冗余问题)
函数指针数组指针
就是指向函数指针数组的指针
如果你想,也可以一直套娃 不过就意义不大了
回调函数
qsort函数
应用
模拟实现 利用回调函数思想
回调函数思想 将一个函数指针作为参数传递给一个函数 再调用这个函数指针访问被指向的函数
字符串与内存函数
求字符串长度 strlen 遇到斜杠零结束
字符串函数
长度不受限制
strcpy 字符串拷贝函数
strcat 字符串追加函数
strcmp 字符串比较函数
长度受限制,可以控制长度
strncpy
strncat
strncmp
字符串查找函数
strstr 查找字符串中的字符,并返回他们的地址
strtok
分割字符串,并标记
传空指针,也能通过标记继续分割字符串
错误信息报告函数
strerror 将错误码翻译成错误信息
perror 打印错误信息
字符操作函数
字符分类函数
isdigit 参数是十进制数字 0~9返回真,否则返回假
等等...
toupper 转成大写
tolower 转成小写
等等...
内存操作函数
memcpy 内存拷贝函数
memmove 内存拷贝函数 目标内存块可以折叠
memset 内存定义函数
memcmp 内存比较函数
自定义类型
结构体
结构体成员类型 不限
结构体自引用
结构体变量
声明
定义
全局变量
局部变量
初始化
结构体成员的访问
结构体变量.成员变量名
结构体指针->成员变量名
结构体内存对齐 很重要,要会算
结构体传参
应用 实现通讯录
枚举
定义
优点
增加代码的可读性和可维护性
与#define定义的标识符比较 枚举有类型检查,更加严谨
防止了命名污染(封装)
便于调试
使用方便,一次可以定义多个常量
应用 改造通讯录
联合(共用体)
定义
特点 联合的成员共用同一块内存空间
大小计算
至少是最大成员的大小
要对齐到最大对齐数的整数倍 与结构体类似
动态内存分配与柔性数组
动态内存分配
动态内存函数的介绍
malloc
【void* malloc (size_t size)】
开辟动态内存
free
【void free (void* ptr)】
释放动态内存
calloc
【void* calloc (size_t num, size_t size)】
开辟动态内存并初识化
realloc
【void* realloc (void* ptr, size_t size)】
追加动态内存空间
常见动态内存错误
记得释放内存
记得置空指针
小心越界访问
小心内存泄漏
应用 改造动态开辟内存的通讯录
柔性数组
特点
柔性数组成员前面必须至少一个其他成员
sizeof 返回的结构大小不包括柔性数组的内存
包含柔性数组成员的结构用malloc函数进行内存
的动态分配,并且分配的内存需要大于结构的大
小,以适应柔性数组的预期大小
使用
优势
方便内存的释放,只需要一次free
连续的内存能提高访问速度,减少内存碎片
给我们解决问题提供了更多的可能
文件操作
文件类型
程序文件
源程序文件(后缀为.c)
目标文件(windows环境后缀为.obj)
可执行程序(windows环境后缀为.exe)
数据文件
文件名 文件路径+文件名主干+文件后缀
文件的打开与关闭
文件指针
打开文件 fopen 函数
关闭文件 fclose 函数
文件操作
r
w
等等...
文件的顺序读写
fgetc
fputc
等等...
文件的随机读写
fseek
fseek
fseek
等等...
文本与二进制文件
文件读取结束判定 feof
文件缓冲区
应用 文件改造通讯录
程序环境与预处理
程序环境
程序的翻译环境 源代码被转换为可执行的机器指令
程序的执行环境 用于实际执行代码
编译+链接 编译
预编译(预处理)
编译
汇编
链接
运行环境
预处理
预定义符号
__FILE__ 进行编译的文件位置
__LINE__ 文件当前的行号
__DATE__ 文件被编译的日期
__TIME__ 文件被编译的时间
等等...
#define
#define 定义常量
#define定义标识符
#define 定义宏
#define 的替换规则
#和##
# 可以把一个宏参数变成对应的字符串
##可以把位于它两边的符号合成一个符号
带副作用的宏参数
宏和函数对比
#undef 这条指令用于移除一个宏定义
条件编译
单分支条件编译 #ifdef PRINT...#endif
多分支条件编译
#if PRINT == 1
#elif PRINT == 10
#else
#endif
判断是否被定义 #if defined(PRINT)...#endif
文件包含
本地文件包含
库函数包含
嵌套文件包含 在头文件中写下#pragma once
资源评论
戊子仲秋
- 粉丝: 4466
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- alu.v
- H21-282学习参考.pdf
- QuestionTwo.java
- QuestionOne.java
- AWS Certified Solutions Architect Study Guide -SAA-C03 .docx
- 校园小情书微信小程序源码 社区小程序前后端开源 校园表白墙交友小程序.rar
- OA办公自动化管理系统(Struts1.2+Hibernate3.0+Spring2+DWR).rar
- 简历-求职简历-word-文件-简历模版免费分享-应届生-高颜值简历模版-个人简历模版-简约大气-大学生在校生-求职-实习
- 南京邮电大学数学实验:熟练掌握 Matlab 软件的基本命令和操作
- 简历-求职简历-word-文件-简历模版免费分享-应届生-高颜值简历模版-个人简历模版-简约大气-大学生在校生-求职-实习
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功