1.数据类型
- 编译器指定出的数据类型,为了更好的管理内存
2.c语言标准
- ANSI 美国国家标准协会制订出的标准,在89年制订出第一套c89标准
3.typedef 使用
- 主要用途:给类型起别名
- 可以简化struct关键字
- 可以区分数据类型
- 提高代码可移植型
4.void的使用
- 无类型,不可以创建变量,无法分配内存
- 限定函数返回值
- 限定函数中参数列表
- void *:万能指针,可以不需要强制转换给其他指针变量赋值
5.sizeof 的使用
- 本质:不是函数,而是一个操作符
- 当统计类型占的内存空间时候,必须加上小括号
- 当统计变量占的内存空间时候,可以不加小括号
- 返回值类型:无符号整型 unsigned int
- 可以统计数组的长度
- 数组名如果在参数列表中,会退化为指针,指向数组的第一个元素
6.变量的修改方式
- 直接修改
- 间接修改
- 通过指针对内存进行修改
- 对自定义数据类型进行修改
7.内存分区
运行前
- 代码区
- 共享的
- 只读的
- 数据区
- data:已初始化的全局变量,静态变量,常量
- bss:未初始化的全局变量,静态变量,常量
- 代码区
运行后
- 栈区
- 属于先进后出的数据结构
- 由编译器管理数据开辟和释放
- 变量的声明周期在该函数结束后自动释放掉
- 堆区
- 容量远远大于栈区
- 没有先进后出的数据结构
- 由程序员管理开辟和释放:malloc,free
- 手动开辟的要手动释放
- 栈区
8.栈区
- 不要返回局部变量的值,因为局部变量在函数执行之后就释放啦
- 我们没有权限操作释放后的内存
9.堆区
- 在堆区开辟的数据,记得要手动释放
- 如果在主调函数中没有给指针分配内存,那么被调用函数需要使用高一级指针给主调函数的指针分配内存
10.数据区
放入是静态变量,全局变量,常量
static 和 extern区别
- static 静态变量:编译阶段分配内存,只能在当前文件内使用,只初始化一次
- extern 全局变量:c语言下默认的全局变量前都隐藏的加了该关键字
const修饰的变量
- 全局变量
- 直接修改 失败
- 间接修改 失败 因为放在常量区,收到保护
- 局部变量
- 直接修改 失败
- 间接修改 成功 原因放在栈上
- 伪常量 不可以初始化数组
- 字符串常量
- 不同的编译器可能有不同的处理方式
- ANSI没有指定出标准
- 有些编译器可以修改字符串常量,有些不可以
- 有些编译器将相同的字符串常量看成一个
- 全局变量