|
第1章 课程导学/ T* T) [5 l8 m4 Q$ i9 z
本章作为课程内容引入,主要介绍课程结构,课程的学习方法等。希望你能通过这门课程彻底掌握程序语言的“道”和“术”。9 [& Y6 B4 @. e
共 2 节 (7分钟)
" i' v) C' t: N/ R5 z( B. u1-1 课前必读3 o1 _5 S2 R# h- J0 R4 j% M0 v
1-2 课程介绍与学习指南 (06:20)
, ^; z% O% ?$ V0 b0 A) Q- e4 x- l! s4 F
第2章 C语言必备基础
* t2 N5 o. L. F, s$ |0 V+ X本章主要讲解演示编译环境搭建,IDE配置,调试方法,代码规范风格等内容,为课程后续内容做足准备工作。. g- r- h& s& S. j6 Z
共 5 节 (43分钟)
! h0 J) U( _1 ?7 E! Z6 V& F2-1 环境搭建【CLion/MSVC/MinGW】 (09:34)+ i' A" _' S9 T: ?) |
2-2 第一行C语言代码【cmake工程结构】 (07:41)( Z& d/ `+ L# r3 l
2-3 程序调试方法 (13:05)
8 u# s/ c( z. q2-4 C语言的代码风格【Google C CodeStyle/CLion配置代码风格】 (11:53); ^- z2 z0 v3 s! X1 f
2-5 【加餐】背景知识* w" l9 b, D# x) H) n( {
$ ?8 b, @& r3 O* B8 j- X' V第3章 C语言快速入门 n& X/ _5 B6 \' C9 |* t9 w' o
本章核心是对C语言的基本数据类型、变量常量、运算符、分支和循环语句等必备知识进行讲解,适合零基础的同学快速上手,也适合C语言基础薄弱的同学查缺补漏。) m4 F+ n1 p+ q% j; b
共 10 节 (132分钟). K- R$ f: u: @6 J2 G$ P
3-1 数据类型之int类型【不同系统版本差异】 (16:31)4 q3 Y/ B# v6 s/ O
3-2 数据类型之char类型【常见问题解决】 (15:11)6 ~ k( ]" i! ^/ o
3-3 数据类型之浮点类型【实际应用技巧】 (09:43)
% T1 F1 p& @/ `( O, t3-4 变量【内存地址分析】 (10:00)
1 H8 r4 n& X4 L0 b3-5 常量【常量修改秘笈】 (11:54)7 S; N+ r3 X! F0 g# _" r* W
3-6 运算符-1【易踩坑点】 (16:01)
0 e- X/ |* N1 e3-7 运算符-2【难点突破】 (10:36)
0 n$ D) ?2 j0 i7 O: I- T9 R& K3-8 条件分支语句 (16:05)' K; y+ k% \# G9 m
3-9 循环语句 (17:18)% ^0 s1 w0 h6 F4 L# D& ?
3-10 案例:猜数字的游戏 (08:04)
( }) G$ B8 W( I, o. n& e
* Z. j6 h V# [1 a2 Q' g' N第4章 函数与程序结构; B+ V/ v+ v9 U
本章讲解C语言中函数的声明、实现以及使用方法,变量的类型和作用域。本章最后还会为你定制一个经典的汉诺塔的问题来实践函数的递归。相信通过本章的学习,你就可以独立完成一些基本功能的程序开发了。
* q% D: l& `1 e: p- {5 ~共 6 节 (55分钟); ]) E. I: |) V1 T- D( U; _, ] i
4-1 函数基础【tips:Google命名规范】 (06:41)
6 g, N% d+ u, x" y6 Y; K, d4-2 函数的原型【空参数列表与 C++的区别】 (08:50)2 h5 c+ r* S/ e% F2 W6 W8 E3 v7 I
4-3 变量的类型和作用域【Compiler Explorer查看汇编指令】 (16:26)
! T8 }/ `$ H1 j! z p" Y1 y0 D) |+ ]4-4 函数的变长参数【对比Java的变长参数】 (07:11)+ s, R0 Z: ]2 N4 _9 ~
4-5 函数的递归【C语言实现斐波那契数列】 (10:22); ~# P( N4 b" C
4-6 案例:汉诺塔 (05:29)' g5 f1 U5 q9 a8 K' @
- I" w6 L1 @8 ^9 P) m, m
第5章 预处理和宏
8 s4 r$ B$ z0 a, d% q3 o" a& A& e本章讲解C语言的预处理和宏的使用方法,包括文件包含、条件编译、宏函数等特性的理解和应用。本章最后会带你深度对比宏和函数实现一个方便打印输出的PRINTLNF 宏。
2 y# X+ m* n4 i$ c% w, z8 {: `4 p共 5 节 (53分钟): O3 n% ] I# ^( I7 x; J- u2 N
5-1 文件包含【领略编译器宏之以小搏大】 (09:45)
7 J P4 |8 ^; K) }1 A5-2 案例:自定义头文件 (07:35)
& a4 H4 W1 f2 ^1 m# [5-3 宏函数 (10:46)0 l( K: q+ U# I) Q4 H
5-4 条件编译【掌握实际应用场景】 (11:15)! C: k2 O/ e1 k# J# ~' s
5-5 案例:实现 PRINTLNF (13:26)
# i& a5 ~. I/ M( L. p8 v$ g5 ~
& p1 N0 U: q: U* e# c8 k第6章 玩转数组( ]% J4 C# T8 |0 o8 s
本章将带你吃透C语言中的数组,包括数组在内存当中的存储形式,字符串的基本概念,数组作为函数参数传递等内容。本章最后也会带你就数组元素的排序这一经典问题进行实践,加深对数组本身的理解。
2 a9 p1 u5 s; ^共 7 节 (62分钟)/ |8 ~2 L* k4 s. _+ A3 s/ [
6-1 数组基础【C语言设计哲学】 (10:34)* q v! G; V7 j/ }
6-2 数组的边界 (09:50)0 n, K; Q, e& Q& y5 T9 [
6-3 字符串 (08:35)
$ D E) R" ~7 \- M+ ]' |2 E6-4 函数的数组类型参数【C语言极致效率之源】 (04:45)
2 ]% O- }6 ^1 h, Y7 N6-5 二维数组【数组参数的正确使用姿势】 (10:11)
6 M! N$ F3 C# M, x6 m9 f6 H/ G5 S6-6 案例:打乱数组的顺序【各种场景应用】 (06:02)
8 g( L K5 i/ R7 g6 F! Y! n6-7 案例:数组元素的排序【Lomuto分割法】 (11:04)1 t1 `* k- y* t' ?7 T, A
6 x, N9 Q! d: E( v) L第7章 吃透指针: A k/ O9 a7 o% C& h. x( R x
本章将带你吃透C语言的指针,包括指针的运算、函数参数传递以及返回值的内存复制过程、动态内存分配、函数指针等特性的分析及应用。本章最后还会结合宏和指针深度剖析一个简单的交换变量值的多种实现方法以及指针版本的快速排序算法的实现。...
) F/ c' w. S6 b) A4 k2 ]共 10 节 (106分钟)
' o0 @# s( O6 U7-1 指针基础【摸清本质带你爱上指针】 (09:05)
. `, c: u2 U' [% o7 K6 l& K7-2 只读指针变量与只读变量指针 (04:43)
% n" L9 w/ i# w# n7-3 特殊的指针【使用禁忌】 (09:35)
) I- \% |/ A& e& t# H- U+ U4 z7 t7-4 指针的运算【各式魔法操作】 (10:26)+ B# e! ^) U" T) O
7-5 左值和右值【只需记住这两点】 (06:54)
1 G# X3 g* j( V0 N9 c* d7-6 指针参数作为返回值【通过汇编了解函数返回值机制】 (11:21)
2 y& b. u, C9 z7-7 动态内存分配【突破面试高频考点】 (14:30)
( t4 G1 `4 w6 g) y7-8 函数指针与typedef (14:09)
1 T) |/ j1 S: }3 A7 u8 |# j! U7-9 案例:交换两个变量的值 (14:49)
9 m% E. N# D* ~) l$ q7 x2 g7-10 案例:指针版本的快速排序【Hoare分割法】 (10:03)
+ R' @: v" n, v H
# ]2 w2 c. l9 l2 ~第8章 聚合数据类型
# H8 B# i, Z, d @* [0 W本章将讲解C语言的聚合数据类型,包括结构体、联合体、枚举等特性及应用,也重点剖析结构体的内存对齐特性,本章最后会结合前面的知识给出字节序判断和单链表的基本实现的案例。7 W1 [0 D7 _4 U. H; J. A( W6 H
共 6 节 (76分钟). H% Q0 H) i1 N4 c
8-1 结构体【内存占用分析】 (15:34); f* ^( z3 ]+ w4 ]
8-2 结构体的内存对齐【内存占用优化】 (14:42), r4 ~" D) ], J2 e! M
8-3 联合体【使用场景分析】 (08:32)
- c s: ?, k/ o9 s' t8-4 枚举【多语言对比】 (12:25)
3 O R! t1 C: F8-5 案例:判断字节序 (07:03)
7 g& _- ]5 @, t8-6 案例:单链表的基本实现 (16:47)
! H; i% N. U* L2 M+ w6 M4 [. z9 s+ X8 x9 l
第9章 字符串的应用/ H" W5 \# I g
本章将讲解标准库中对字符串提供的支持,包括窄字符与宽字符相关的字符类型判断,字符串比较、连接、复制,原始内存的清除、复制、移动等工具函数的应用,以及窄字符与宽字符的转换函数及编码设置的方法,最后会对C99新增的restrict、C11新增的安全版本函数做分析。...2 v3 k" `% k# c
共 10 节 (73分钟)
2 Z3 M0 F0 n& z% v( k9-1 判断字符的类型及原理的剖析 (08:59)# ^" L1 W: A% [
9-2 字符串与其他数值类型的转换 (14:21)# T% |( ^6 L$ M+ t1 T. |: x
9-3 字符串的长度与比较 (07:34)" L% K/ w' t" [2 P& I
9-4 查找字符与子串 (06:00)- U9 {( r3 L9 S/ o6 g# ~) _
9-5 字符串的拆分 (09:41)
$ S4 [ L, m# m* G( W- h i5 C* @9-6 字符串的连接和复制 (03:14)
4 j/ m* ~6 Q% Q7 v1 E9-7 几个常见的内存操作函数 (07:51)( q3 r' n! h. H& l( a8 B7 C
9-8 C99的restrict (02:01)" F3 a+ B7 P4 \" m+ l# {& j
9-9 C11的安全版本的函数 (03:44)
7 V4 P0 M5 q9 ~7 j6 E' ?$ s9-10 宽字符串与窄字符串的转换 (08:56)
" b1 D5 T4 N' B8 E/ w& _1 ]& y' z: Z1 c- _- V7 y. y0 v# J
第10章 时间的应用) b) f( q+ z& E4 w) v; \
本章将讲解标准库中对时间提供的支持,包括计算机软件当中各类常见的时间概念,获取系统时间、日历时间的方法,时间的格式化和解析的方法等,由于各平台对时间的支持存在一定差异,我们使用条件编译实现一个跨平台的毫秒时间戳的获取函数,为你编写跨平台的代码提供思路。...
0 q6 h7 k& h* U4 ~0 Y共 6 节 (49分钟)
}9 p( k# S) S10-1 时间的基本概念 (08:50)
( Y3 \2 q% `3 W# c$ O10-2 获取系统时间 (13:25)( p3 x5 M- W9 d3 P
10-3 获取日历时间 (06:36) X B2 p, t1 c" T# W' j0 G/ h
10-4 格式化时间 (07:42)
& V$ a" n3 N2 P' }10-5 解析时间 (07:57)
) o q2 z5 t- ?$ K! V8 k# `10-6 计算时间差 (04:09)" [1 H, a% u/ N) o# @
: n. c3 O+ {: r0 _; [. m2 x; L第11章 文件的输入输出4 u' K" q `/ h* G
本章将讲解标准库中对文件输入输出的支持,包括文件流的概念,文件流按字符、按行、按字节读写函数的使用,并使用多个版本的文件复制的案例贯穿全章,在对比和迭代当中深刻理解不同的读写方式之间的差异,加深你对文件流缓冲等概念的理解。...1 @, x: k1 r) W- D4 K/ g
共 14 节 (125分钟)
! B9 ^8 f+ _0 [- b0 a1 A" [5 i11-1 输入输出流 (10:27)( K# x/ a5 k% H$ Z% F, X
11-2 文件流的缓冲 (09:55)# w$ B% [% Z) Z% \' o$ {1 T- \1 N
11-3 读写一个字符 (06:46)
9 F# Y: l5 @! D5 q7 B! X3 K11-4 案例:复制文件-1 (09:28)4 r7 R; G# o) X! N; }
11-5 读写一行字符 (07:12)- ^" q' {* p+ K2 p
11-6 案例:复制文件-2 (11:27)& |8 U A0 O" m; [% n
11-7 读写指定大小的字节 (09:45)
0 y6 y" D( {( U6 v5 A6 t: F11-8 案例:序列化和反序列化的基本实现 (11:24)! B& n( `! h1 t& _# d' ?( u
11-9 案例:复制文件-3 (06:29)
% J3 Y- ]7 K7 G5 K ~: @11-10 格式化文本的输入输出 (03:31). l- Z8 j+ f) y L! m
11-11 案例:重定向标准输入输出流 (10:53)0 b0 s# U, h( K8 m
11-12 案例:统计文件字符个数 (08:38)7 o' M* N7 l% I7 S) H2 A
11-13 输入输出流的位置 (08:19)2 F7 M7 p5 B$ K. I" h$ G W
11-14 其他常见的文件操作 (10:22)
+ ]+ ?8 L. |9 z
' D1 g2 n8 J' N第12章 线程与并发
3 R* v4 j" ]7 \- v- O本章将讲解C语言标准库从C11引入的线程以及并发相关知识。线程和并发是开发人员的必备基础,本章内容除了帮助你在实践当中更好地了解诸如pthread这样的线程库以外,对于其他现代语言的学习也是非常有益的。本章最后综合所学完成处理复杂的线程返回结果、并发任务执行与函数回调两个实践案例。...
0 m3 j( d0 |1 F k" ^0 r共 10 节 (74分钟)2 n) l- S) e# r6 U- R; \+ [) B
12-1 线程基础 (04:01)
) [2 m8 p; Y- B i12-2 线程的基本用法 (10:57)
& z: V0 \8 m# x2 J8 P% _( A: k7 c+ O12-3 资源的线程安全问题 (09:12) ? U* w: k6 A6 q. P6 h0 \
12-4 volatile (03:51)
_, Z' z: O. e' S12-5 原子类型 (09:38)
) V4 d: s# m5 x. v5 O12-6 锁 (05:42)
& f0 {7 M6 e- t3 x3 B12-7 Thread Local (08:26)
2 C( p7 r: L# H/ A12-8 副作用与纯函数 (03:05)
! K9 O8 k0 q# ?( B. W* `. C12-9 案例:处理复杂的线程返回结果 (05:34)
- Q7 l3 |4 p; X7 ~9 {; ?12-10 案例:并发任务执行与函数回调 (12:44)
* f4 {; K) s4 z2 c+ S/ s2 J
: s( K4 I# C1 x1 a9 a第13章 编译、链接和库
8 u, s" T- R& h! d7 `9 A8 Y本章将基于gcc讲解C语言编译过程中的各个环节和细节,帮助你了解C语言是如何从源码一步一步编译成最后的可执行文件,也会讲解如何将自己的模块作为依赖导出,如何使用conan来管理第三方依赖,本章最后还会以C++和Java为例传授你如何使用其他语言来调用C语言库。...$ G, F0 E1 c: p; u8 O4 Y2 v6 O4 ]
共 7 节 (59分钟)' r9 ^% z! v# w i
13-1 可执行程序的编译过程 (09:06)9 X# b8 @: q3 P- P0 y; {5 P& c1 j0 v
13-2 静态链接库的构建和使用 (06:12)- ~8 d/ l, U, n3 Y7 R" E/ u! N3 F
13-3 动态链接库的编译和使用 (05:32)
3 M( s2 A. d* c13-4 使用CMake完成库的编译和链接 (09:28)
3 o/ S% |4 x5 Q. I13-5 使用Conan管理依赖 (11:45)
% H8 U9 [) D* i1 t9 v13-6 使用C++调用C程序 (09:36)
+ o; a2 Y4 k0 S7 W! i' Z) s13-7 使用Java调用C (06:56)$ T( {# v7 K+ H
: Y6 m4 b1 J5 Y: `. s$ C第14章 GUI 编程实践& A) N% A0 @# G1 x. I! ?5 x
本章将讲解Linux桌面GUI的主流开发技术GTK+,基于该框架了解如何使用C语言开发 GUI应用,掌握如何实现跨平台的GUI应用程序开发(支持Windows/macOS/Linux),还将了解使用GTK+开发GUI程序的基本方法,包括如何创建Window,通过css来编辑控件样式,使用Glade快速完成UI布局等。最后我们将仿照macOS的计算器实现一个功能相对...( x& i7 ^( |4 f" Z/ w
共 10 节 (132分钟)
. N* }) U( N1 P* J14-1 GUI开发概述【各平台GUI方案】 (03:51)0 `! L% S' E) z
14-2 安装GTK【安装GTK的各种问题解决】 (08:00)( w) c2 Q0 A% E J- E+ q
14-3 编写第一个GTK程序 (16:42). \) K* b9 U/ `' D' k
14-4 为GTK应用配置主题 (16:13)% k8 X7 u3 a! k# W
14-5 使用Xml完成布局 (09:57)5 A$ B ^! j8 W6 p N
14-6 使用Glade完成布局【提高布局开发效率的大招】 (18:02). I% c5 e, d7 k9 b0 S3 K( k+ C5 V
14-7 扩展:使用CSS调整控件样式 (15:03)0 M0 [$ t6 J7 S+ t- T! w" A5 v
14-8 打包发布GTK程序 (13:09)+ T' w; W0 K, b* q, {! G
14-9 GTK的面向对象设计理念 (12:38)
2 Y) x3 O" L' F8 A14-10 GTK的内存管理 (17:28)# g/ Q5 I, d7 i5 w
! {0 c; \8 o; f; j5 G' g" V0 c第15章 综合案例:桌面跨平台高仿Mac版计算器
" q/ u+ C k N/ W1 V& }$ Y% K8 y ^本章将综合前面所学,带大家从案例需求分析开始,到核心模块的接口设计,再到核心模块的业务逻辑及UI实现,手把手打造一款桌面跨平台高仿Mac版计算器。( F, t4 b" u" U* d
共 8 节 (86分钟) l9 S8 ~5 T' ^2 L& G
15-1 案例效果展示 (03:22)/ W7 Q" f2 Y' g' ^
15-2 计算器核心模块接口设计 (12:20); \) q, o9 l, b# o/ j+ z& e1 y" K
15-3 使用控制台调试计算器的输入输出 (08:22)
7 S8 v- j Y5 E" Y( I3 }2 T15-4 测试用例编写与单元测试 (10:31)4 }2 p0 v- n7 i; F
15-5 计算器核心逻辑实现-1 (09:02)
?2 O. V1 [" r15-6 计算器核心逻辑实现-2 (11:38)* s1 l# @+ U+ W" F" G* j
15-7 计算器UI布局开发 (09:14)
- ?: e, A+ N) g8 ]7 P, g2 V. D7 k15-8 计算器UI逻辑接入及案例最终完整实现 (20:41)
5 m, V z: N3 I9 L
a* b0 i( r$ F/ y/ \# R; `9 H第16章 综合案例:桌面跨平台的下载工具
9 N7 P0 O8 {$ }4 h% p* \3 r, g本章作为课程最后的综合案例,将带你从零开始开发一个桌面跨平台的下载工具,包括使用Conan管理依赖,使用GTK+开发UI,使用curl访问网络,使用sqlite来存储任务,使用独立的线程来承载下载任务等等。本章综合性较强,我们力求尽可能多地覆盖课程当中所学的知识,帮助大家进一步加深对C语言的认识和理解,培养使用C语言构建...5 r, A; n* b4 B) |
共 14 节 (172分钟)
$ Z- n6 I9 v1 Z* z) B9 J# D O. b16-1 案例基本功能及环境配置介绍 (12:06)
6 W3 E# t# i* N+ h" A16-2 SQLite数据库引入及封装 (16:31)
6 O( d; r0 P# h4 K$ B) k" H" s16-3 实现对任务数据结构的增删改查 (06:08)
& _- ~5 \1 D3 k16-4 CURL的引入及下载逻辑的封装 (14:45)
9 T$ ~1 L+ @& p8 S( G8 c4 d7 M16-5 文件名的解析及下载逻辑的验证 (20:44)
) V" Y' N5 ?! z16-6 线程池的引入以及下载相关接口的封装 (15:41)
' @# c8 R- [6 J/ e& ~( {4 P16-7 下载软件UI布局的介绍 (02:40)
* c5 Q" p" {% t8 N- O& i1 \4 n1 x16-8 实现下载任务的添加-1 (11:44)8 r8 Q3 L n7 [0 {) ~
16-9 实现下载任务的添加-2 (11:59)
9 | }' A3 A" T16-10 窗口内存泄漏的分析与解决 (08:02)
" Y0 x0 K" R( u$ v8 w/ q9 E7 S16-11 实现下载任务列表-1 (17:57)
+ H4 d# M% _4 A- X; A16-12 实现下载任务列表-2 (10:53)
! }6 D( v- I5 z% r( S16-13 实现下载任务列表-3 (18:27)* v. }1 i; R$ E; ]( J. v. E h
16-14 下载软件的功能演示 (04:11)) B" v( i! Z9 S" C. L6 G* G- A% E! t
/ E' W& u$ K( I3 t( q5 p7 H9 M第17章 课程总结+ t& H; \! i; x* G0 M# E. ]/ t
本章作为课程的最后一章,我们将带你整体梳理课程所学的内容,并提供一些后续的学习建议,在课程问答区老师等着与你进一步交流。
o( y! r/ B! O \- S共 1 节 (7分钟)% {1 @+ Z* y1 x& M2 o0 v
17-1 课程总结 (06:33)& B( L& I1 [" P" c5 h6 k+ w8 ?) w
* T! ], k3 V. w( g* E
* E. f: P* C0 N, H& e3 \" Z
( G7 {: f/ V _# i e7 k! X8 u% S资源下载地址和密码(百度云盘): [/hide] 百度网盘信息回帖可见3 `+ v: O: ^# {
* F6 F3 v r i* W( e) U' m1 Z
8 J R: t. p2 \7 u4 H% q" ]
/ A) E9 R9 C o6 m
本资源由Java自学网收集整理【www.javazx.com】 |
|