目录
认识C
就应该 知道
的点
数组
数组指针和指针数组
指针数组 : 指针的数组
数组指针 : 错误名词 – 数组的名也是数组的地址, 相当于数组的指针
编译器
编译的 四个 步骤
gcc 编译指令
gcc hello.c -o a
a为可执行文件
-
预处理
.c-.i
简单处理高级语言
- 处理宏
字符替换
和条件编译 - 引入头文件
- 删除注释和空白格
- 添加行号和文件标识
- 保留
#pragma
编译指令 编译器需要使用
- 处理宏
-
编译
.i-.s
将高级语言翻译为汇编语言
gcc -S hello.c -o a.s
- 词法分析
- 语法分析
- 语义分析
- 优化代码生成汇编
-
汇编
.s-.o
将汇编文件翻译为机器语言
gcc -c hello.c -o a.o
-
链接
.o-可执行
机器语言生成可执行文件
gcc hello.c -o a
C开发的四步
编辑 – 编译 – 链接 – 运行
内存
C语言内存模型及作用
RAM – flash
ROM – 内存
C - 内存模型 | 作用 |
---|---|
栈区 – stack | 存放函参和局部变量 效率高,空间有限 2M 运算内置于CPU的指令集 |
堆区 – heap | 用户自行操作 通常"内存溢出"问题就在这里 释放内存需手动 |
静态区 – Data | 全局变量 和静态变量 初始化和未初始化的数据放在相邻的位置 |
常量区 – Data | 常量 |
代码区 – code | 存放代码 |
函数
动态内存的申请和释放
new() 和 malloc()
与 delete() 和 free()
区别
前者会调用构造函数和析构函数
后者单纯申请和释放堆上内存空间
指针
函数指针和指针函数
函数指针 : 指向函数的指针
-
指针指向函数第一句话的地址.
-
(*p)() == p()
p 就是 指向函数的指针
指针函数 : 返回值为指针的函数
-
*p() == *(p())
因为
()
优先级高于*