1.函数调用流程
宏函数
- 在一定程度上会比普通函数效率高,普通函数会有出栈和入栈的时间开销
- 将比较频繁短小的函数写为宏函数
- 优点:以空间换时间
调用惯例
- 主调函数和被调函数都必须有一致的约定,才可以正确的调用函数
- 调用管理的内容:出栈方,参数的传入顺序,函数名称的修饰
- c和c++下默认的调用惯例为cdecl
2.栈的生长方向以及内存存储方式
生长方向
- 栈底:高地址
- 栈顶:低地址
内存存储方式
- 高位字节数据 — 高地址
- 低位字节数据 — 低地址
- 小端对齐
3.空指针和野指针
空指针:不允许向NULL和非法地址拷贝内存
野指针
- 为初始化指针
- malloc后也free了,但是指针没有置空
- 指针操作超过变量作用域
空指针可以释放,野指针不可以释放
4.指针的步长
- 指针变量+1之后,跳跃的字节数量
- 解引用的时候,取得字节数
- 对自定义数据类型进行练习
- 如何获取自定义数据类型中属性的偏移
- offsetof(结构体,属性)
- 头文件#include <stddef.h>
5.指针的间接赋值
- 满足条件
- 一个普通变量和一个指针变量(或者一个实参一个形参)
- 建立关系
- 通过*进行赋值
6.指针做函数参数的输入输出特性
- 输入特性
- 在主调函数中分配内存,被调函数使用
- 输出特性
- 被调函数中分配内存,主调函数使用
7.字符串强化训练
字符串是有结束\0
利用三种凡是对字符串进行拷贝
- 利用[]
- 利用指针
- 利用:while (*dest++ = *source++){}
利用两种方式对字符串进行反转
- 利用[]
- 利用指针
9格式化字符串
- 可以利用sprintf对字符串进行格式化
- sprintf(目标字符串,”格式”,占位参数)