视频选集 0 课程内容和理念介绍 1-1 Ubuntu环境搭建 1-2 vim文本编辑器入门 1-3 gcc编译器入门 1-4 gdb调试器入门 2-1 编译全过程简介 2-2 编译过程之预编译 2-3 编译过程之编译与汇编 2-4 编译过程之链接与格式转换 2-5 常见的编译错误:分清楚在哪个编译过程出错 2-6 条件编译:灵活的代码管理与设计 2-7 宏定义与使用:让编译器多干一点活 2-8 宏函数的使用:高效但容易出错 2-9 调试LOG宏:有效的日志打印是调试的关键 3-1 sizeof:常被误会成函数的关键字 3-2 char:内存空间最小的数据类型 3-3 int(shortlong)最适合CPU的数据类型 3-4 void指针很常用 3-5 struct:结构体,数据打包但要注意字节对齐 3-6 union:联合体,成员共享一块内存和内存的首地址 3-7 struct+union:优雅的数据结构设计(数据传输包) 3-8 enum:枚举类型,被取代性很强 (#define) 3-9 指针类型:初尝指针的味道 3-10 typedef:给数据类型起一个别名 3-11 register:一个很有理想的关键字 3-12 static:初心是为了延迟局部变量的生命周期 3-13 extern:架构设计中比较讨厌的关键字 3-14 const:修饰只读的变量,不是常量 3-15 volatile:一个反编译器优化的关键字 3-16 条件与选择关键字:switch有时候比if更高效 3-17 循环和跳转关键字:goto有时候也可很优雅 3-19 算数运算-加减乘除 3-18 算数运算-mod操作 3-20 移位、位与或、取反、位异或:操作寄存器的常用手段 3-21 逻辑、赋值运算、内存操作符 4-1 函数:面向过程编程的有力工具,其三大属性 4-2 函数参数传递的本质:内存拷贝 4-3 值传递:对数据进行隔离和保护 4-4 地址传递:多返回值设计 4-5 地址传递:连续空间传递 4-6 C与继承 4-7 C与封装 4-8 C与多态 4-9 C与重载(一):可变参数函数 4-10 C与重载(二):回调函数 4-11 C与重载(三):弱连接函数 4-12 C语言中单一职责原则 4-13 C语言中的开闭原则 4-14 C语言中的里氏替换原则 4-15 C语言中的接口隔离和依赖倒置原则 5-1 内存空间分布:C语言内功 5-2 内存的操作权限(一):代码段 5-3 内存的操作权限(二):只读数据段 5-4 内存的操作权限(三):全局数据段 5-5 内存的操作权限(四):堆空间 5-6 内存的操作权限(五):栈空间 5-7 堆栈的生长方向 5-8 内存溢出问题(一):栈溢出 5-9 内存溢出问题(二):栈缓冲区溢出 5-10 内存溢出问题(三):堆缓冲区溢出 5-11 指针:C语言强大的内存操作利器 5-12 空指针和野指针:让它们原形毕露 5-13 指针访问内存(一):标准数据类型指针 5-14 指针访问内存(二):连续空间类型指针 5-15 指针访问内存(三):linux第一宏container_of 5-16 指针访问内存(四):函数类型指针 5-17 指针运算(一):算数运算 5-18 指针运算(二):逻辑运算 5-19 多级指针(一):本质上也是一个指针 5-20 多级指针(二):指针的地址传递 5-21 多级指针(三):无序变成有序 6-1 【面试题】复杂类型定义