typedef使用

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