c语言提高day01

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没有指定出标准
      • 有些编译器可以修改字符串常量,有些不可以
      • 有些编译器将相同的字符串常量看成一个
你的支持是我最大的动力!
0%