typedef使用
- 起别名 - 简化struct关键字
- 区分数据类型
- 提高代码移植性
- void使用
- 不可以利用void创建变量无法给无类型变量分配内存
- 用途:限定函数返回值,函数参数
- void * 万能指针可以不通过强制类型转换就转成其他类型指针
- sizeof用法
- 本质:不是一个函数,是一个操作符
- 返回值类型 unsigned int无符号整型
- 用途:可以统计数组长度
- 变量的修改方式
- 直接修改
- 间接修改
- 对自定义数据类型做练习
- 内存分区
- 运行前
- 代码区共享只读
- 数据区存放数据:全局变量、静态变量、常量
- 已初始化数据区 data
- 未初始化数据区 bss
- 运行后
- 栈符合先进后出数据结构,编译器自动管理分配和释放,有限容量
- 堆容量远远大于栈,不是无限。手动开辟 malloc 手动释放 free
- 栈区
- 符合先进后出数据结构
- 注意事项:不要返回局部变量的地址,局部变量在函数执行之后就被释放了,释放的内存就没有权限取操作了,如果操作结果未知
- 堆区
- 利用malloc在堆区创建数据
- 利用free释放堆区
- 注意事项:主调函数没有分配内存,被调函数需要用更高级的指针去修饰低级指针,进行分配内存
- static 和extern 区别
- 特点:在运行前分配内存,程序运行结束生命周期结束,在本文件内都可以使用静态变量
- extern 可以提高变量作用域
- 常量
- const修饰的变量
- 全局变量
- 直接修改失败,间接修改语法通过,运行失败,受到常量区保护
- 局部变量
- 直接修改失败,间接修改成功,放在栈上
- 字符串常量
- vs 将多个相同字符串常量看成一个
- 不可以修改字符串常量
- ANSI并没有制定出字符串是否可以修改的标准,根据编译器不同,可能最终结果也是不同的
