logo资料库

王贵林老师c语言进阶篇pdf文档.pdf

第1页 / 共120页
第2页 / 共120页
第3页 / 共120页
第4页 / 共120页
第5页 / 共120页
第6页 / 共120页
第7页 / 共120页
第8页 / 共120页
资料共120页,剩余部分请下载后查看
数据类型
内存
补码
运算规则
补码特点
char(8位)补码的展示
数据类型
数据类型
范围计算
整型
实型
为什么需要类型
类型转化
类型转化的原理
小数据赋给大变量
大数据赋给小变量
隐式转化
整型提升
混合提升
显示(强制类型)转化
练习
下面的代码输出什么?
以下程序输出什么?
进程空间
进程空间   
进程/程序
程序
进程
进程到程序
数据在进程空间的存储
示意图
数据在进程空间
函数的压栈与出栈
普通函数
递归函数
练习
数组
一维数组
本质
初始化
访问
数组名作整体访问
数组名作起始地址访问成员
作参数传递
返回堆中一维数组
返回值返回(一级指针)
参数返回(二级指针)
练习
合并有序数组使其依然有序
求最值
求次最值
二维数组
本质
初始化
访问
数组名作为整体访问
数组名作起始地址访问成员
结论
线性存储
作参数传递
数组指针
对一维数组名的误解及纠正
数组指针
定义
别名
应用
二维数组传参
一维空间的二维访问
多维数组
本质分析
形像描述
练习
求值?
下面代码的值为多少?
指针
内存编址与变量地址
编址
变量地址
指针与指针变量
指针的本质
指针变量
变量大小
变量类型
引用与解引用
运算
二级指针
定义与初始化
间接数据访问
改变一级指针指向
改变N-1级指针的指向
初始化一级指针
二级指针的步长
指针数组(字符指针数组)
定义
使用
二级指针访问指针数组
指针数组名赋给二级指针的合理性
完美匹配的前提
常见指针数组
char**argv与char*argv[]
char **env与char*env[]
指针的输入与输出
堆上一维空间
返回值返回(一级指针)
参数返回(二级指针)
堆上二维空间
一级指针作返值输出
二级指针作返值输出
空间申请
空间释放
三级指针作参数输出
课堂练习
序列加密
读文件到内存
const
const 修饰变量
const 修饰指针
const 修饰指针指向
应用(修饰函数参数)
练习
请手写下面代码的输出结果。
下面的代码输出什么?
天生棋局
函数
多参返回
引列
正解
函数指针
函数的本质
函数指针变量定义与赋值
函数指针类型定义
函数指针调用
函数指针数组
定义
应用场景
回调函数
问题引出
回调(函数作参数)
本质论
qsort
函数接口
回调函数例举
课堂练习
练习
 (*(void(*) ()) 0)(); 
再论指针与数组
一级指针与一维数组名
等价条件
便利访问
二级指针与指针数组名
等价条件
便利访问
通过二级指针申请二维空间
数组指针与二维数组名
等价条件
便利访问
关于二级指针与二维数组名
对数组名的引用
一维数组
二维数组
小结与练习
指针-数组-函数
请写出右边的示意
传参汇总
基于数组排序(提高篇)
选择优化
选择原理与步骤
代码实现
优化升级
冒泡优化
冒泡原理与步骤
代码实现
优化升级
快速排序
排序原理与步骤
代码实现
练习
实现二级排序
基于数组的查找
线性查找
二分查找
原理步骤
迭代版(Iterative)
递归版(Recursive)
字符串
字符串常量
定义相关
c语言处理字符串
字符数组
字符数组与字符串
不等价条件
读越界
写越界
等价条件
N系列字符串函数
字符串操作函数
strlen
使用
自实现
strcpy/strncpy
使用
自实现
strcat/strncat
使用
自实现
strcmp/strncmp
使用
自实现
sprintf
atoi/itoa
strchr/strrchr
函数介绍
使用
统计一个字符在字符串内出现的次数
自实现
strcspn/strspn
strstr/strpbrk
函数接口
使用
统计一个字符串在另一个字符串内出现的次数
自实现1
自实现2
strtok
函数接口
分析入门
使用
分割字符串到二维空间
思考实现strtok
内存操作函数
memcpy
memmove
memcmp
memchr
memset
字符串应用案例
trim系列
引例
去除右空格
去除左空格
去除全空格
去除任意字符
递归逆置字符串
非递归实现
逆置输出一个字符串
将逆置的串保存(全局)
将逆置的串保存(局部)
练习
返回s2在s1中最后一次出现的位置
清空字符串中的制表符
格式化文件
判断字符串s1是否是s2循环移位所得
求字符频度
压缩字符串
实现atoi功能
实现itoa功能
数据结构(双向循环链表)
双向循环链表存在的意义
链表构成
节点图示
节点码示
空链表示意
非空链表示意
双向循环链表静态形式
节点代码
静态模拟
双向循环链表的操作
创建
尾插法
头插法
插入
遍历
走next
走pre
求长度
查找
单向
双向
删除节点
排序
交换数据
交换指针
销毁
练习
用双向循环链表实现读文件到内存
动态库与静态库
函数库
库存在的意义
库的划分
库的命名规则
静/动态库特点
linux库存放的路径
使用特点
查看一个文件的库的使用情况
标准库的使用
libm.a
lib.so
比较
libm.a
libm.so
图示
自定义库的生成与使用
多文件编程
书写方式
理论基础
实战案例
静态库的生成与使用
步骤
实战
动态库的生成与使用
步骤
实战
链接路径
运行路径
gcc的编译选项
配置文件读写
文件回顾
文件基础
文本文件与二进制文件
缓冲
文件操作
一次读写一个字符
一次读写一行字符
一次读写一块
格式化读写
链表回顾
节点
创建
插入
求长
查找
删除
排序
销毁
字符串处理回顾
常规处理
去空处理
实现登录系统
链表节点设计
读文件并处理字符串
登录
SQLite
官网与下载
SQLite管理操作
进入sqlite3交互模式
创建销毁表
插入与查询
排序
修改与删除记录
Window+Qt+SQLite配置
window中lib /dll 的关系
生成lib文件
填加环境变量
生成lib库
建立三方库相关的文件夹
配置当前工程的pro文件
测试环境
C/C++操作SQLite
附录
ascii码表
c运算符优先级
SVN 配置与启动
官方下载地址
创建服务配置文件
配置配置文件
svnserve.conf
passwd
authz
启动服务
创建与删除服务
createservice.bat
deleteservice.bat
更新与提交
原创作者: 王桂林 技术交流:QQ 329973169 C 语言进阶篇 人生除了眼前的苟且,还有 C++和远方。 Author:王桂林 Mail Org : : 广州小码哥教育 guilin_wang@163.com 1
原创作者: 王桂林 技术交流:QQ 329973169 版本信息: 版本 V1.0 修订人 王桂林 审阅人 时间 组织 2016.04.02 广州小码哥教育科技有限公司 1
原创作者: 王桂林 技术交流:QQ 329973169 1. 数据类型........................................................................................................................................8 1.1. 内存.................................................................................................................................... 8 1.2. 补码.................................................................................................................................... 8 1.2.1. 运算规则..................................................................................................................8 1.2.2. 补码特点..................................................................................................................8 1.2.3. char(8 位)补码的展示..............................................................................................9 1.3. 数据类型............................................................................................................................ 9 1.3.1. 数据类型..................................................................................................................9 1.3.2. 范围计算..................................................................................................................9 1.3.3. 为什么需要类型....................................................................................................10 1.4. 类型转化.......................................................................................................................... 11 1.4.1. 类型转化的原理....................................................................................................11 1.4.2. 隐式转化................................................................................................................12 1.4.3. 显示(强制类型)转化.............................................................................................12 1.5. 练习.................................................................................................................................. 12 1.5.1. 下面的代码输出什么?....................................................................................... 12 1.5.2. 以下程序输出什么?........................................................................................... 13 2. 进程空间......................................................................................................................................14 2.1. 进程空间.......................................................................................................................... 14 2.2. 进程/程序.........................................................................................................................14 2.2.1. 程序........................................................................................................................14 2.2.2. 进程........................................................................................................................14 2.2.3. 进程到程序............................................................................................................14 2.3. 数据在进程空间的存储.................................................................................................. 15 2.3.1. 示意图....................................................................................................................15 2.3.2. 数据在进程空间....................................................................................................16 2.4. 函数的压栈与出栈.......................................................................................................... 17 2.4.1. 普通函数................................................................................................................17 2.4.2. 递归函数................................................................................................................17 2.5. 练习.................................................................................................................................. 18 3. 数组..............................................................................................................................................19 3.1. 一维数组.......................................................................................................................... 19 3.1.1. 本质........................................................................................................................19 3.1.2. 初始化....................................................................................................................19 3.1.3. 访问........................................................................................................................19 3.1.4. 作参数传递............................................................................................................20 3.1.5. 返回堆中一维数组............................................................................................... 21 3.1.6. 练习........................................................................................................................22 3.2. 二维数组.......................................................................................................................... 24 3.2.1. 本质........................................................................................................................24 3.2.2. 初始化....................................................................................................................25 3.2.3. 访问........................................................................................................................25 3.2.4. 线性存储................................................................................................................27 1
原创作者: 王桂林 技术交流:QQ 329973169 3.2.5. 作参数传递............................................................................................................27 3.3. 数组指针.......................................................................................................................... 28 3.3.1. 对一维数组名的误解及纠正............................................................................... 28 3.3.2. 数组指针................................................................................................................28 3.3.3. 应用........................................................................................................................28 3.4. 多维数组.......................................................................................................................... 29 3.4.1. 本质分析................................................................................................................29 3.4.2. 形像描述................................................................................................................29 3.5. 练习.................................................................................................................................. 29 3.5.1. 求值?......................................................................................................................29 3.5.2. 下面代码的值为多少?....................................................................................... 30 4. 指针..............................................................................................................................................31 4.1. 内存编址与变量地址...................................................................................................... 31 4.1.1. 编址........................................................................................................................31 4.1.2. 变量地址................................................................................................................31 4.2. 指针与指针变量.............................................................................................................. 32 4.2.1. 指针的本质............................................................................................................32 4.2.2. 指针变量................................................................................................................32 4.3. 二级指针.......................................................................................................................... 34 4.3.1. 定义与初始化........................................................................................................34 4.3.2. 间接数据访问........................................................................................................35 4.3.3. 初始化一级指针....................................................................................................36 4.3.4. 二级指针的步长....................................................................................................37 4.4. 指针数组(字符指针数组)................................................................................................38 4.4.1. 定义........................................................................................................................38 4.4.2. 使用........................................................................................................................38 4.4.3. 二级指针访问指针数组....................................................................................... 39 4.4.4. 常见指针数组........................................................................................................39 4.5. 指针的输入与输出.......................................................................................................... 40 4.6. 堆上一维空间.................................................................................................................. 41 4.7. 堆上二维空间.................................................................................................................. 41 4.7.1. 一级指针作返值输出........................................................................................... 41 4.7.2. 二级指针作返值输出........................................................................................... 42 4.7.3. 三级指针作参数输出........................................................................................... 43 4.7.4. 课堂练习................................................................................................................43 4.8. const...................................................................................................................................46 4.8.1. const 修饰变量......................................................................................................46 4.8.2. const 修饰指针......................................................................................................47 4.8.3. const 修饰指针指向..............................................................................................47 4.8.4. 应用(修饰函数参数).............................................................................................48 4.9. 练习.................................................................................................................................. 48 4.9.1. 请手写下面代码的输出结果。........................................................................... 48 4.9.2. 下面的代码输出什么?..........................................................................................49 4.9.3. 天生棋局................................................................................................................49 2
原创作者: 王桂林 技术交流:QQ 329973169 5.4.1. (*(void(*) ()) 0)(); 5. 函数..............................................................................................................................................50 5.1. 多参返回.......................................................................................................................... 50 5.1.1. 引列........................................................................................................................50 5.1.2. 正解........................................................................................................................50 5.2. 函数指针.......................................................................................................................... 50 5.2.1. 函数的本质............................................................................................................50 5.2.2. 函数指针变量定义与赋值................................................................................... 50 5.2.3. 函数指针类型定义............................................................................................... 51 5.2.4. 函数指针调用........................................................................................................51 5.2.5. 函数指针数组........................................................................................................51 5.3. 回调函数.......................................................................................................................... 53 5.3.1. 问题引出................................................................................................................53 5.3.2. 回调(函数作参数)................................................................................................. 54 5.3.3. 本质论....................................................................................................................54 5.3.4. qsort........................................................................................................................ 55 5.4. 练习.................................................................................................................................. 58 ------这是什么?..................................................................... 58 6. 再论指针与数组..........................................................................................................................59 6.1. 一级指针与一维数组名.................................................................................................. 59 6.1.1. 等价条件................................................................................................................59 6.1.2. 便利访问................................................................................................................59 6.2. 二级指针与指针数组名.................................................................................................. 59 6.2.1. 等价条件................................................................................................................59 6.2.2. 便利访问................................................................................................................59 6.2.3. 通过二级指针申请二维空间............................................................................... 59 6.3. 数组指针与二维数组名.................................................................................................. 59 6.3.1. 等价条件................................................................................................................59 6.3.2. 便利访问................................................................................................................59 6.4. 关于二级指针与二维数组名.......................................................................................... 59 6.5. 对数组名的引用.............................................................................................................. 59 6.5.1. 一维数组................................................................................................................59 6.5.2. 二维数组................................................................................................................60 6.6. 小结与练习...................................................................................................................... 60 6.6.1. 指针-数组-函数..................................................................................................... 60 6.6.2. 请写出右边的示意............................................................................................... 60 6.6.3. 传参汇总................................................................................................................60 7. 基于数组排序(提高篇)............................................................................................................... 62 7.1. 选择优化.......................................................................................................................... 62 7.1.1. 选择原理与步骤....................................................................................................62 7.1.2. 代码实现................................................................................................................62 7.1.3. 优化升级................................................................................................................62 7.2. 冒泡优化.......................................................................................................................... 63 7.2.1. 冒泡原理与步骤....................................................................................................63 7.2.2. 代码实现................................................................................................................63 3
原创作者: 王桂林 技术交流:QQ 329973169 7.2.3. 优化升级................................................................................................................63 7.3. 快速排序.......................................................................................................................... 64 7.3.1. 排序原理与步骤....................................................................................................64 7.3.2. 代码实现................................................................................................................64 7.4. 练习.................................................................................................................................. 64 7.4.1. 实现二级排序........................................................................................................64 8. 基于数组的查找..........................................................................................................................66 8.1. 线性查找.......................................................................................................................... 66 8.2. 二分查找.......................................................................................................................... 66 8.2.1. 原理步骤................................................................................................................66 8.2.2. 迭代版....................................................................................................................66 8.2.3. 递归版....................................................................................................................66 9. 字符串..........................................................................................................................................68 9.1. 字符串常量...................................................................................................................... 68 9.1.1. 定义相关................................................................................................................68 9.1.2. c 语言处理字符串..................................................................................................68 9.2. 字符数组.......................................................................................................................... 68 9.2.1. 字符数组与字符串............................................................................................... 68 9.2.2. 不等价条件............................................................................................................69 9.2.3. 等价条件................................................................................................................69 9.2.4. N 系列字符串函数.................................................................................................69 9.3. 字符串操作函数.............................................................................................................. 70 9.3.1. strlen........................................................................................................................70 9.3.2. strcpy/strncpy......................................................................................................... 70 9.3.3. strcat/strncat...........................................................................................................71 9.3.4. strcmp/strncmp.......................................................................................................71 9.3.5. sprintf...................................................................................................................... 71 9.3.6. atoi/itoa...................................................................................................................72 9.3.7. strchr....................................................................................................................... 73 9.3.8. strstr........................................................................................................................ 74 9.3.9. strtok....................................................................................................................... 76 9.4. 内存操作函数.................................................................................................................. 79 9.4.1. memcpy...................................................................................................................79 9.4.2. memmove............................................................................................................... 80 9.4.3. memcmp................................................................................................................. 80 9.4.4. memchr................................................................................................................... 80 9.4.5. memset....................................................................................................................80 9.5. 字符串应用案例.............................................................................................................. 81 9.5.1. trim 系列.................................................................................................................81 9.5.2. 递归逆置字符串....................................................................................................82 9.6. 练习.................................................................................................................................. 84 9.6.1. 返回 s2 在 s1 中最后一次出现的位置................................................................84 9.6.2. 清空字符串中的制表符....................................................................................... 84 9.6.3. 格式化文件............................................................................................................84 4
原创作者: 王桂林 技术交流:QQ 329973169 9.6.4. 判断字符串 s1 是否是 s2 循环移位所得............................................................84 9.6.5. 求字符频度............................................................................................................84 9.6.6. 压缩字符串............................................................................................................84 9.6.7. 实现 atoi 功能....................................................................................................... 84 9.6.8. 实现 itoa 功能....................................................................................................... 85 10. 数据结构(双向循环链表)......................................................................................................... 86 10.1. 双向循环链表存在的意义............................................................................................86 10.2. 链表构成........................................................................................................................ 86 10.2.1. 节点图示..............................................................................................................86 10.2.2. 节点码示..............................................................................................................86 10.2.3. 空链表示意..........................................................................................................87 10.2.4. 非空链表示意......................................................................................................87 10.3. 双向循环链表静态形式................................................................................................87 10.3.1. 节点代码..............................................................................................................87 10.3.2. 静态模拟..............................................................................................................87 10.4. 双向循环链表的操作....................................................................................................87 10.4.1. 创建......................................................................................................................87 10.4.2. 插入......................................................................................................................89 10.4.3. 遍历......................................................................................................................89 10.4.4. 求长度..................................................................................................................90 10.4.5. 查找......................................................................................................................90 10.4.6. 删除节点..............................................................................................................91 10.4.7. 排序......................................................................................................................91 10.4.8. 销毁......................................................................................................................92 10.5. 练习................................................................................................................................ 93 10.5.1. 用双向循环链表实现读文件到内存................................................................. 93 11. 动态库与静态库........................................................................................................................94 11.1. 函数库............................................................................................................................ 94 11.1.1. 库存在的意义......................................................................................................94 11.1.2. 库的划分..............................................................................................................94 11.1.3. 库的命名规则......................................................................................................94 11.1.4. 静/动态库特点....................................................................................................94 11.1.5. linux 库存放的路径..............................................................................................95 11.1.6. 使用特点..............................................................................................................95 11.1.7. 查看一个文件的库的使用情况......................................................................... 95 11.2. 标准库的使用................................................................................................................96 11.2.1. libm.a.....................................................................................................................96 11.2.2. lib.so...................................................................................................................... 96 11.2.3. 比较......................................................................................................................97 11.3. 自定义库的生成与使用................................................................................................98 11.3.1. 多文件编程..........................................................................................................98 11.3.2. 静态库的生成与使用....................................................................................... 100 11.3.3. 动态库的生成与使用....................................................................................... 100 11.4. gcc 的编译选项.............................................................................................................101 5
原创作者: 王桂林 技术交流:QQ 329973169 12. 配置文件读写..........................................................................................................................103 12.1. 文件回顾......................................................................................................................104 12.1.1. 文件基础............................................................................................................104 12.1.2. 文件操作............................................................................................................104 12.2. 链表回顾......................................................................................................................104 12.2.1. 节点....................................................................................................................104 12.2.2. 创建....................................................................................................................104 12.2.3. 插入....................................................................................................................104 12.2.4. 求长....................................................................................................................104 12.2.5. 查找....................................................................................................................104 12.2.6. 删除....................................................................................................................104 12.2.7. 排序....................................................................................................................104 12.2.8. 销毁....................................................................................................................104 12.3. 字符串处理回顾..........................................................................................................104 12.3.1. 常规处理............................................................................................................104 12.3.2. 去空处理............................................................................................................104 12.4. 实现登录系统..............................................................................................................104 12.4.1. 链表节点设计................................................................................................... 104 12.4.2. 读文件并处理字符串....................................................................................... 105 12.4.3. 登录....................................................................................................................105 13. SQLite.........................................................................................................................................106 13.1. 官网与下载..................................................................................................................106 13.2. SQLite 管理操作........................................................................................................... 106 13.2.1. 进入 sqlite3 交互模式.......................................................................................106 13.2.2. 创建销毁表....................................................................................................... 108 13.2.3. 插入与查询....................................................................................................... 109 13.2.4. 排序....................................................................................................................110 13.2.5. 修改与删除记录............................................................................................... 110 13.3. Window+Qt+SQLite 配置..............................................................................................111 13.3.1. window 中 lib /dll 的关系................................................................................. 111 13.3.2. 生成 lib 文件......................................................................................................111 13.3.3. 建立三方库相关的文件夹............................................................................... 112 13.3.4. 配置当前工程的 pro 文件................................................................................112 13.3.5. 测试环境............................................................................................................113 13.4. C/C++操作 SQLite..........................................................................................................113 14. 附录..........................................................................................................................................116 14.1. ascii 码表.......................................................................................................................116 14.2. c 运算符优先级............................................................................................................ 117 14.3. SVN 配置与启动.......................................................................................................... 117 14.3.1. 官方下载地址................................................................................................... 117 14.3.2. 创建服务配置文件........................................................................................... 117 14.3.3. 配置配置文件................................................................................................... 118 14.3.4. 启动服务............................................................................................................118 14.3.5. 创建与删除服务............................................................................................... 118 6
分享到:
收藏