C语言学习笔记-变量存储

  1. 怎样确定常量的类型呢?从常量的表示形式既可以判定其类型,举例来说:只要看到由单撇号括起来的单个字符或转义字符就是字符常量。也可以在常量的末尾加专用字符,强制指定常量的类型。

  2. 从变量的作用域(即从空间)的角度来观察,变量可以分为全局变量局部变量

  3. 变量的存储有两种不同的方式:静态存储方式动态存储方式

  4. 在动态存储区中存放以下数据:

    • 函数形式参数。在调用函数时给形参分配存储空间
    • 函数中定义的没有用关键字static声明的变量
    • 函数调用时的现场保护和返回地址等
  5. C语言存储类别包括4种:自动的(auto),静态的(static),寄存器的(register),外部的(extern)。根据变量的存储类别,可以知道变量的作用域和生存期

  6. 局部变量的存储类别

    • 自动变量(auto变量)。函数中的局部变量,如果不专门声明为static存储类别,都是动态的分配存储空间的,数据存储在动态存储区中。函数中的形参和在函数中定义的局部变量都属于此类。

    • 静态局部变量(static局部变量)。特点:如果在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0或空字符\0。虽然静态局部变量在函数调用时结束后仍然存在(表明它可以只被赋值一次),但其它函数是不能引用它的。

      用static声明一个变量的作用:①对局部变量用static声明,把它分配在静态存储区中,该变量在整个程序执行期间不释放。②对全局变量用static声明,则该变量的作用域只限于本文件模块

    • 寄存器变量(register变量)。有些时候我们不需要显式的将变量指定为register,因为优化后的编译系统能够自动为一些经常使用的局部变量指定为register变量。

  7. 全局变量的存储类别

    • 扩展全局变量的使用范围可以用extern,比如在变量未声明前使用变量,或者在一个文件中使用另一个文件定义的全局变量:

      #include<stdio.h>
      
      int main()
      {
          extern A, B, C;     // 也可以写成 extern int A, B, C; 注意这样写并不代表是在声明3个变量
          scanf("%d %d %d", &A, &B, &C);
          return 0;
      }
      
      int A, B, C;
      
      int print()
      {
          printf("%d %d %d\n", A, B, C);
      }
      

      如果要限定声明的全局变量只能在本文件使用,则要在全局变量加上static。

  8. 声明和定义:把建立存储空间的声明称为定义,而把不需要建立存储空间的声明称为声明

  9. 根据函数能否被其它源文件调用,将函数区分为内部函数外部函数

总结

posted @ 2020-04-11 10:27  天之道,利而不害  阅读(314)  评论(0编辑  收藏  举报