C语言百万年薪修炼课程
8个模块
C语言基础教程 + 编译和链接(多文件编程) + 内存精讲 + 数据结构 + 算法(多语言实现) + Socket网络通信 + 多线程编程 + 动/静态链接库
10个项目
贪吃蛇游戏(彩色版) + 推箱子小游戏 + 扫雷小游戏 + 2048小游戏 + 学生信息管理系统(3个版本) + HTTP服务器(2个版本) + 本地聊天系统
460 篇原创文章 + 10 个经典项目 = 75.75W 字。
本课程包含 8 个模块,从基础到进阶,让读者掌握扎实的理论基础 + 高级概念 + 底层知识,一点一点看透软件编程的本质,具备不断向上突破的潜力。
说白了,这是一套内功修炼课程,相当于武侠世界中的易筋经。
想拿高薪,想进大厂,想架构项目,想不断升职,内功是不可或缺的。甚至,应届生在面试大厂时,都不一定要求开发过实际项目,但一定会要求具备深厚的内功,这样后期才能拥有巨大的成长空间。
往届重视履历和经验,应届重视基础和理论。
内功才能决定一个程序员的潜力和高度,才能让大家不断突破天花板,跳出中年危机的陷阱。那些在大厂一路高升、年薪百万的程序员,没有一个不会内功的。还有不少 Java、Python、PHP 程序员,或者培训班毕业的程序员,工作几年以后会遇到瓶颈,总觉得越学越不明白,此时他们会回头重新学习C语言,把那些基础理论和底层知识恶补一把,让自己的内功提升一个 Level。
总之,该学的,跑不掉,只是或早或晚而已。
这套课程由站长和团队倾力打造,不但内容充实,而且语言通俗。更重要的是,我们只说人话,不说官话,用多年的编程经验来剖析那些晦涩的名词和深奥的道理,让小白也能看得懂、看得爽。
帮助小白踹开编程的大门,掌握常见的C语言知识,学完以后可以做出贪吃蛇、2048、扫雷游戏等好玩的项目。
发布 7 年,改版 6 次,由站长亲自执笔,将多年的编程经验灌输其中,典型的实践派。
- 第1章 零基础开胃菜
- 1.通俗地理解什么是编程语言
- 2.C语言究竟是一门怎样的语言?
- 3.C语言到底能做什么?
- 4.程序员必须要学习C语言吗?
- 5.C语言能找什么工作?能拿多少钱?
- 6.高薪/大厂程序员要学习哪些东西?
- 7.零基础学编程难吗?多久能入门?
- 8.英语和数学不好,能学编程吗?
- 9.C语言和C++到底有什么关系?
- 10.二进制、八进制和十六进制
- 11.不同进制之间的转换
- 12.数据在内存中的存储形式
- 13.载入内存,让程序运行起来
- 14.学习C语言,一定要学习内存
- 15.ASCII编码,将英文存储到计算机
- 16.GB2312编码和GBK编码,将中文存储到计算机
- 17.Unicode字符集,将全世界的文字存储到计算机
- 18.小白不要这样学习C语言,这是一个坑!
- 19.明白了这点才能学好编程,否则参加什么培训班都没用
- 第2章 C语言入门
- 1.第一个C语言程序
- 2.选择正确的输入法,严格区分中英文
- 3.源文件是什么?
- 4.编译和链接是什么?
- 5.主流C语言编译器汇总
- 6.IDE(集成开发环境)是什么?
- 7.工程/项目是什么?
- 8.主流C语言开发环境(IDE)汇总与推荐
- 9.C语言的4套标准:C89、C99、C11和C17
- 10.C语言为什么有那么多编译器?
- 11.程序安装是怎么回事?
- 12.制作安装包,让用户安装程序
- 13.C语言程序的错误和警告
- 14.解析第一个C语言程序
- 15.C语言代码中的空白符
- 16.彩色版的C语言,让文字更漂亮
- 17.一个真正带界面的C语言程序
- 第3章 变量和数据类型
- 1.给小白讲变量和数据类型
- 2.在屏幕上输出各种类型的数据
- 3.C语言整数类型(short、int、long、long long)
- 4.C语言中的二进制、八进制和十六进制
- 5.C语言中的正数和负数
- 6.整数在内存中是如何存储的,为什么它堪称天才般的设计
- 7.整数的取值范围以及数值溢出
- 8.C语言小数(float、double和long double)
- 9.小数在内存中是如何存储的,揭秘诺贝尔奖级别的设计(长篇神文)
- 10.C语言中的英文字符
- 11.在C语言中使用中文字符
- 12.C语言到底使用什么编码?谁说C语言使用ASCII码,真是荒谬!
- 13.C语言转义字符
- 14.C语言布尔类型(_BOOL)
- 15.C语言标识符、关键字、注释、表达式和语句
- 16.C语言加减乘除运算
- 17.C语言自增(++)和自减(--)
- 18.变量的定义位置以及初始值
- 19.C语言运算符的优先级和结合性
- 20.C语言数据类型转换
- 21.如何书写长文本(长字符串)?
- 第4章 C语言输入输出
- 1.C语言printf()用法大全
- 2.C语言printf()的一个刁钻Bug
- 3.在屏幕的任意位置输出字符,开发小游戏的第一步
- 4.C语言scanf()从键盘读取数据
- 5.5个字符和字符串输入函数汇总
- 6.C语言scanf()用法大全
- 7.进入缓冲区(缓存)的世界,破解一切与输入输出有关的疑难杂症
- 8.结合缓冲区谈scanf()函数,那些奇怪的行为其实都有章可循
- 9.清空(刷新)缓冲区,从根本上消除那些奇怪的行为
- 10.C语言模拟密码输入(显示星号)
- 11.非阻塞式键盘监听,用户不输入数据程序也能继续执行
- 第5章 循环结构和选择结构
- 1.C语言if else语句
- 2.C语言关系运算符
- 3.C语言逻辑运算符
- 4.C语言switch case语句
- 5.C语言条件运算符
- 6.C语言while循环
- 7.C语言for循环
- 8.C语言跳出循环
- 9.C语言循环嵌套
- 10.对选择结构和循环结构的总结
- 11.谈编程思维的培养,初学者如何实现自我突破(非常重要)
- 12.写一个内存泄露的例子,让计算机内存爆满
- 第6章 C语言数组
- 1.什么是数组
- 2.C语言二维数组
- 3.判断数组中是否包含某个元素
- 4.C语言字符数组和字符串
- 5.字符串的输入和输出
- 6.C语言字符串处理函数
- 7.C11标准新引入了安全函数!
- 8.C语言数组是静态的,不能插入或删除元素
- 9.C语言数组的越界和溢出
- 10.C语言变长数组:使用变量指明数组的长度
- 11.对数组元素进行排序
- 12.对C语言数组的总结
- 第7章 C语言函数
- 1.什么是函数?
- 2.C语言函数定义
- 3.C语言函数的形参和实参
- 4.C语言函数的返回值
- 5.C语言函数的调用(从中发现程序运行的秘密)
- 6.函数声明以及函数原型
- 7.全局变量和局部变量
- 8.C语言变量的作用域
- 9.C语言块级变量
- 10.C语言递归函数(带实例演示)
- 11.中间递归函数(比较复杂的一种递归)
- 12.多层递归函数(最烧脑的一种递归)
- 13.递归函数的致命缺陷:巨大的时间开销和内存开销(附带优化方案)
- 14.忽略语法细节,从整体上理解函数
- 第8章 预处理命令
- 1.什么是预处理命令?
- 2.#include的用法
- 3.C语言宏定义
- 4.C语言带参数的宏定义
- 5.带参宏定义和函数的区别
- 6.宏参数的字符串化和宏参数的连接
- 7.C语言中几个预定义宏
- 8.C语言条件编译
- 9.#error命令,阻止程序编译
- 10.C语言预处理命令总结
- 第9章 指针
- 1.1分钟彻底理解指针的概念
- 2.指针变量的定义和使用
- 3.C语言指针变量的运算
- 4.数组指针(指向数组的指针)
- 5.字符串指针(指向字符串的指针)
- 6.C语言数组灵活多变的访问形式
- 7.指针变量作为函数参数
- 8.C语言指针作为函数返回值
- 9.二级指针(指向指针的指针)
- 10.空指针NULL以及void指针
- 11.数组和指针绝不等价,数组是另外一种类型
- 12.数组到底在什么时候会转换为指针
- 13.指针数组(数组每个元素都是指针)
- 14.一道题目玩转指针数组和二级指针
- 15.二维数组指针(指向二维数组的指针)
- 16.函数指针(指向函数的指针)
- 17.只需一招,彻底攻克C语言指针,再复杂的指针都不怕
- 18.main()函数的高级用法:接收用户输入的数据
- 19.对C语言指针的总结
- 第10章 结构体
- 1.C语言结构体
- 2.C语言结构体数组
- 3.C语言结构体指针
- 4.C语言枚举类型
- 5.C语言共用体
- 6.大端小端以及判别方式
- 7.C语言位域
- 8.C语言位运算
- 9.使用位运算对数据或文件内容进行加密
- 第11章 重要知识点补充
- 1.typedef的用法
- 2.const的用法
- 3.C语言随机数
- 第12章 文件操作
- 1.C语言中的文件是什么?
- 2.C语言打开文件
- 3.文本文件和二进制文件到底有什么区别?
- 4.以字符形式读写文件
- 5.以字符串的形式读写文件
- 6.以数据块的形式读写文件
- 7.格式化读写文件
- 8.随机读写文件
- 9.C语言实现文件复制功能
- 10.FILE结构体以及缓冲区深入探讨
- 11.获取文件大小(长度)
- 12.插入、删除、更改文件内容
- 第13章 C语言调试
- 1.调试的概念以及调试器的选择
- 2.设置断点,开始调试
- 3.查看和修改变量的值
- 4.单步调试(逐语句调试和逐过程调试)
- 5.即时窗口的使用
- 6.查看、修改运行时的内存
- 7.有条件断点的设置
- 8.assert断言函数
- 9.调试信息的输出
- 10.VS调试的总结以及技巧
编译和链接就是把多个源文件(.c文件)和头文件(.h文件)组合在一起构成一个程序,其中有很多细节需要注意,有的甚至还会让人感到奇怪。
学会了编译和链接(多文件编程),就可以玩转中大型项目开发了,这是一个很大的进步。
- 1. 从extern关键字开始谈C语言多文件编程
- 2. 那些被编译器隐藏了的过程
- 3. 目标文件和可执行文件里面都有什么?
- 4. 到底什么是链接,它起到了什么作用?
- 5. 符号——链接的粘合剂
- 6. 强符号和弱符号
- 7. 强引用和弱引用
- 8. C语言模块化编程中的头文件
- 9. C语言标准库以及标准头文件
- 10. 细说C语言头文件的路径
- 11. 防止C语言头文件被重复包含
- 12. C语言static变量和函数
- 13. 一个比较规范的C语言多文件编程的例子
- 14. C语言学生信息管理系统演示和说明(文件版)
- 15. C语言学生信息管理系统源码下载和思路解析(文件版)
- 16. C语言学生信息管理系统演示和说明(数据结构版)
- 17. C语言学生信息管理系统源码下载和思路解析(数据结构版)
- 18. C语言学生信息管理系统演示和说明(密码版)
- 19. C语言学生信息管理系统源码下载和思路解析(密码版)
程序是在内存中运行的,一名合格的程序员必须了解内存,学习C语言是了解内存布局的最简单、最直接、最有效的途径,C语言简直是为内存而生的,它比任何一门编程语言都贴近内存。
当你决定学习内存,你已然超越了 99% 的程序员!
- 1. 一个程序在计算机中到底是如何运行的?
- 2. 虚拟内存到底是什么?为什么我们在C语言中看到的地址是假的?
- 3. 虚拟地址空间以及编译模式
- 4. C语言内存对齐,提高寻址效率
- 5. 内存分页机制,完成虚拟地址的映射
- 6. 分页机制究竟是如何实现的?
- 7. MMU部件以及对内存权限的控制
- 8. Linux下C语言程序的内存布局(内存模型)
- 9. Windows下C语言程序的内存布局(内存模型)
- 10. 用户模式和内核模式
- 11. 栈(Stack)是什么?栈溢出又是怎么回事?
- 12. 一个函数在栈上到底是怎样的?
- 13. 函数调用惯例(Calling Convention)
- 14. 用一个实例来深入剖析函数进栈出栈的过程
- 15. 栈溢出攻击的原理是什么?
- 16. C语言动态内存分配
- 17. malloc函数背后的实现原理——内存池
- 18. C语言野指针以及非法内存操作
- 19. C语言内存泄露(内存丢失)
- 20. C语言变量的存储类别和生存期
数据结构研究的是数据之间的关系,再进一步说,它研究的是多份数据之间的分布、排列和勾连的关系,以及在此基础之上如何进行高效的增删改查操作。
数据结构是计算机专业的基础课程,也是所有程序员的内功心法;不懂数据结构就是写代码的农民,了解数据结构才能成为行业专家。
- 第1章 数据结构入门
- 1.数据结构是什么
- 2.数据的逻辑结构和存储结构
- 3.数据结构到底学什么
- 4.时间复杂度和空间复杂度
- 5.数据结构与算法的区别和联系
- 6.数据结构如何自学,效率更高?
- 7.数学不好,对学数据结构有影响吗?
- 8.学好数据结构,你已然超越了99%的程序员!
- 第2章 线性表
- 1.线性表(线性存储结构)是什么
- 2.顺序表(顺序存储结构)是什么
- 3.顺序表的基本操作
- 4.顺序表与数组根本不是一码事!
- 5.链表(链式存储结构)是什么
- 6.单链表的基本操作
- 7.顺序表和链表有哪些不同?
- 8.删除链表倒数第N个结点(3种实现方案)
- 9.实现单链表的反转(4种算法)
- 10.判断两个单链表相交(3种算法)
- 11.存储结构和存取结构,完全不是一码事!
- 12.静态链表是什么
- 13.静态链表的基本操作
- 14.静态链表和动态链表的区别
- 15.双向链表是什么
- 16.双向链表的基本操作
- 17.双向链表实现贪吃蛇游戏(含源码)
- 18.循环链表实现约瑟夫环
- 19.双向循环链表是什么
- 20.判断链表中有环(2种算法)
- 21.线性表实现俄罗斯轮盘赌游戏
- 第3章 栈和队列
- 1.栈是什么
- 2.顺序栈的基本操作(入栈和出栈)
- 3.链栈的基本操作(入栈和出栈)
- 4.递归实现栈的逆序(两种解决方案)
- 5.栈实现进制转换器(C语言实现)
- 6.栈解决括号匹配问题(C语言实现)
- 7.栈结构求表达式的值(C语言实现)
- 8.队列是什么
- 9.顺序队列的基本操作(入队和出队)
- 10.循环队列:更高级的顺序队列
- 11.链式队列的基本操作(入队和出队)
- 12.队列实现停车场管理系统(含C语言源码)
- 13.队列实现“推小车”扑克牌游戏(含C语言源码)
- 14.用两个栈实现一个队列
- 15.用两个队列实现一个栈
- 16.为什么说栈和队列是线性存储结构?
- 第4章 字符串
- 1.串是什么
- 2.串的定长顺序存储结构
- 3.串的堆分配存储结构
- 4.串的块链存储结构
- 5.BF算法(模式匹配算法)
- 6.KMP算法(快速模式匹配算法)
- 7.继续优化KMP算法,效率有质的提升!
- 8.钻牛角尖:为什么KMP算法的主串指针不用回退?
- 9.串存储结构实现字符过滤系统(含C语言源码)
- 第5章 数组和广义表
- 1.数组是什么
- 2.数组的顺序存储结构
- 3.矩阵(稀疏矩阵)压缩存储
- 4.三元组顺序表存储稀疏矩阵
- 5.行逻辑链接的顺序表存储稀疏矩阵
- 6.十字链表法存储稀疏矩阵
- 7.矩阵(稀疏矩阵)的转置算法
- 8.稀疏矩阵的快速转置算法
- 9.行逻辑链接的顺序表实现矩阵乘法
- 10.十字链表实现矩阵加法
- 11.广义表是什么
- 12.广义表的存储结构(2种)
- 13.广义表的深度和长度
- 14.广义表的复制(C语言实现)
- 第6章 树存储结构
- 1.树存储结构是什么
- 2.什么是二叉树
- 3.二叉树的顺序存储结构
- 4.二叉树的链式存储结构
- 5.二叉树的4种遍历算法
- 6.二叉树的先序遍历算法(递归和非递归)
- 7.二叉树的中序遍历算法(递归和非递归)
- 8.二叉树的后序遍历算法(递归和非递归)
- 9.二叉树的层次遍历
- 10.线索二叉树:遍历效率更高的二叉树
- 11.双向线索二叉树:更高级的线索二叉树
- 12.树的双亲表示法
- 13.树的孩子表示法
- 14.树的孩子兄弟表示法
- 15.利用孩子兄弟表示法将森林转变成二叉树
- 16.哈夫曼树(最优二叉树)是什么
- 17.哈夫曼编码(C语言实现)
- 18.回溯算法详解
- 19.回溯算法解决八皇后问题(C语言实现)
- 20.回溯算法实现移动迷宫小游戏(初级版)
- 21.思考:n个结点最多可以构建多少棵树?
- 第7章 图存储结构
- 1.图(图存储结构)是什么
- 2.什么是连通图(强连通图)
- 3.什么是生成树(生成森林)
- 4.图的顺序存储结构
- 5.图的邻接表存储结构
- 6.图的十字链表存储结构
- 7.图的邻接多重表存储结构
- 8.深度优先搜索(DFS)算法
- 9.广度优先搜索(BFS)算法
- 10.深度优先生成树和森林(C语言实现)
- 11.广度优先生成树和森林(C语言实现)
- 12.最小生成树是什么
- 13.Prim算法(普里姆算法)求最小生成树
- 14.Kruskal算法(克鲁斯卡尔算法)求最小生成树
- 15.重连通图是什么
- 16.拓扑排序算法(C语言实现)
- 17.关键路径是什么(C语言实现)
- 18.最短路径是什么
- 19.Dijkstra算法(迪杰斯特拉算法)查找最短路径
- 20.Floyd算法(弗洛伊德算法)查找最短路径
- 21.最短路径算法实现移动迷宫游戏(升级版)
- 第8章 查找算法
- 1.查找表是什么
- 2.顺序查找算法
- 3.二分查找(折半查找)算法详解
- 4.分块查找算法
- 5.静态树表查找算法
- 6.二叉排序树(二叉查找树)是什么
- 7.平衡二叉树(AVL树)是什么
- 8.红黑树(更高级的二叉查找树)
- 9.B-树是什么
- 10.B+树是什么
- 11.键树查找法(双链树和字典树)
- 12.哈希表(散列表)是什么
- 13.哈希查找算法
- 第9章 排序算法
- 1.插入排序算法
- 2.折半插入排序算法
- 3.2路插入排序算法详解
- 4.表插入排序算法
- 5.希尔排序算法(缩小增量排序)
- 6.冒泡排序(起泡排序)算法
- 7.快速排序算法(QSort,快排)
- 8.简单选择排序算法
- 9.树形选择排序(锦标赛排序)算法
- 10.堆排序算法
- 11.归并排序算法
- 12.基数排序算法详解
- 13.对内部排序算法的总结
所谓算法,就是一套解决问题的思路或者方案,也即先做什么,再做什么,最后做什么。
算法的种类有很多,本套教程涵盖了大部分常用算法,包括动态规划算法、分治算法、贪心算法、排序算法、查找算法等,它们都用来解决某一类实际问题。
- 1. 算法是什么
- 2. 时间复杂度和空间复杂度
- 3. 递归算法
- 4. 斐波那契数列(递归+源码+注释)
- 5. 分治算法
- 6. 找数组的最大值和最小值
- 7. 多数元素问题
- 8. 汉诺塔问题(分治+源码+动画演示)
- 9. 贪心算法
- 10. 分发饼干问题
- 11. 最大子序和问题
- 12. 部分背包问题
- 13. 动态规划算法
- 14. 零钱兑换问题
- 15. 01背包问题
- 16. 完全背包问题
- 17. 回溯算法
- 18. 子集问题
- 19. 组合问题
- 20. 全排列问题
- 21. 迷宫问题
- 22. N皇后问题
- 23. 冒泡排序算法
- 24. 双向冒泡排序算法
- 25. 插入排序算法
- 26. 选择排序算法
- 27. 希尔排序算法
- 28. 归并排序算法
- 29. 快速排序算法
- 30. 计数排序算法
- 31. 基数排序算法
- 32. 桶排序算法
- 33. 对排序算法的总结
- 34. 顺序查找算法
- 35. 二分查找算法(折半查找算法)
- 36. 插值查找算法
- 37. 哈希查找算法
- 38. 并查集
- 39. 寻找图中是否存在路径
- 40. 冗余连接问题
- 41. 最小生成树
- 42. prim算法(普里姆算法)详解
- 43. kruskal算法(克鲁斯卡尔算法)详解
- 44. 最短路径算法
- 45. 迪杰斯特拉算法(求最短路径)
- 46. 弗洛伊德算法(求最短路径)
socket 是「套接字」的意思,学习 socket 编程,也就是学习计算机之间如何通信,并用编程语言来实现它。
socket 通信技术就是两台联网的计算机之间交换数据的技术,这就是 socket 的全部内容了吗?是的,socket 远比想象中简单很多!
- 1. socket是什么?套接字是什么?
- 2. 套接字有哪些类型?socket有哪些类型?
- 3. 面向连接和无连接的套接字到底有什么区别
- 4. OSI网络七层模型简明教程
- 5. TCP/IP协议族
- 6. IP、MAC和端口号——网络通信中确认身份信息的三要素
- 7. Linux下的socket演示程序
- 8. Windows下的socket演示程序
- 9. Windows下使用WSAStartup()函数加载DLL
- 10. socket()函数用法详解:创建套接字
- 11. bind()和connect()函数:绑定套接字并建立连接
- 12. listen()和accept()函数:让套接字进入监听状态并响应客户端请求
- 13. send()/recv()和write()/read():发送数据和接收数据
- 14. 使用socket编程实现回声客户端
- 15. socket端口被占用的解决方案(2种)
- 16. 如何让服务器端持续不断地监听客户端的请求?
- 17. socket缓冲区以及阻塞模式详解
- 18. TCP协议的粘包问题(数据的无边界性)
- 19. 图解TCP数据报结构以及三次握手(非常详细)
- 20. 详细分析TCP数据的传输过程
- 21. 图解TCP四次握手断开连接
- 22. 如何优雅地断开TCP连接?
- 23. socket编程实现文件传输功能
- 24. 网络数据传输时的大小端问题
- 25. 在socket编程中使用域名
- 26. 再谈UDP和TCP
- 27. 基于UDP的服务器端和客户端
- 28. Socket模拟网站服务器(HTTP服务器)
- 29. I/O多路复用技术详解
- 30. select实现I/O多路复用(超级详细)
- 31. select多路复用技术实现回声客户端
- 32. poll实现I/O多路复用详解
- 33. Linux epoll:更高效的I/O复用技术
- 34. Linux epoll条件触发和边缘触发详解
- 35. epoll模拟网站服务器(HTTP服务器)
- 36. 多播(基于UDP协议)
多线程是程序并发执行的一种最经典的形式。所谓并发执行,就是同时处理多个任务,而不是处理完一个,再处理另一个。
很多程序都是并发执行的,尤其是服务器上的后台程序;可以说,没有并发就不存在互联网。
- 1. 线程是什么
- 2. POSIX pthread线程库详解
- 3. 第一个多线程程序
- 4. 创建线程
- 5. 终止线程执行(3种方法)
- 6. 获取线程函数的返回值
- 7. 终止线程执行,千万别踩这个坑!
- 8. 线程状态和生命周期详解
- 9. 线程局部存储(TLS)详解
- 10. 线程同步机制
- 11. 互斥锁实现线程同步
- 12. 信号量实现线程同步
- 13. 条件变量实现线程同步
- 14. 读写锁实现线程同步
- 15. 如何避免线程发生死锁?
- 16. 线程属性有哪些,如何自定义线程属性?
- 17. C++11多线程编程详解
- 18. 将Linux多线程程序移植到Windows
- 19. 多线程实现聊天系统
- 20. 手撕线程池(超级肝)
链接库是共享代码的一种方式,可以分为静态链接库和动态链接库。
静态链接库和动态链接库的作用时机不同,静态链接库会在程序编译阶段完成链接操作,而动态链接库是在程序载入内存以后再进行链接操作。
- 1. 库是什么
- 2. 链接库是什么
- 3. Windows下静态链接库的创建和使用
- 4. Linux下静态链接库的创建和使用
- 5. Windows下动态链接库的创建和使用
- 6. Linux下动态链接库的创建和使用
- 7. Windows显式加载动态链接库
- 8. Linux显式加载动态链接库