c语言提高day02

1.函数调用流程

  • 宏函数

    • 在一定程度上会比普通函数效率高,普通函数会有出栈和入栈的时间开销
    • 将比较频繁短小的函数写为宏函数
    • 优点:以空间换时间
  • 调用惯例

    • 主调函数和被调函数都必须有一致的约定,才可以正确的调用函数
    • 调用管理的内容:出栈方,参数的传入顺序,函数名称的修饰
    • c和c++下默认的调用惯例为cdecl

2.栈的生长方向以及内存存储方式

  • 生长方向

    • 栈底:高地址
    • 栈顶:低地址
  • 内存存储方式

    • 高位字节数据 — 高地址
    • 低位字节数据 — 低地址
    • 小端对齐

3.空指针和野指针

  • 空指针:不允许向NULL和非法地址拷贝内存

  • 野指针

    1. 为初始化指针
    2. malloc后也free了,但是指针没有置空
    3. 指针操作超过变量作用域
  • 空指针可以释放,野指针不可以释放

4.指针的步长

  • 指针变量+1之后,跳跃的字节数量
  • 解引用的时候,取得字节数
  • 对自定义数据类型进行练习
    1. 如何获取自定义数据类型中属性的偏移
    2. offsetof(结构体,属性)
    3. 头文件#include <stddef.h>

5.指针的间接赋值

  • 满足条件
    1. 一个普通变量和一个指针变量(或者一个实参一个形参)
    2. 建立关系
    3. 通过*进行赋值

6.指针做函数参数的输入输出特性

  • 输入特性
    • 在主调函数中分配内存,被调函数使用
  • 输出特性
    • 被调函数中分配内存,主调函数使用

7.字符串强化训练

  • 字符串是有结束\0

  • 利用三种凡是对字符串进行拷贝

    • 利用[]
    • 利用指针
    • 利用:while (*dest++ = *source++){}
  • 利用两种方式对字符串进行反转

    • 利用[]
    • 利用指针

9格式化字符串

  • 可以利用sprintf对字符串进行格式化
  • sprintf(目标字符串,”格式”,占位参数)
你的支持是我最大的动力!
0%