目录
  • 1. 变量的存储类别
    • 内存
    • 虚拟内存分区(运行程序时进行分区) 
  • 2. 全局变量
    • 普通的全局变量
    • 静态全局变量
  • 3. 局部变量
    • 普通局部变量
    • 静态局部变量
  • 4. const不可赋值变量
    • 5. volatile多变的变量

      1. 变量的存储类别

      内存

      1. 物理内存:实际的存储设备
      2. 虚拟内存:操作系统虚拟出来的内存
      3. 操作系统会在物理内存和虚拟内存之间做映射。
      4. 在32位系统下,每个进程的寻址范围是4G, 0x00 00 00 00 ~ 0xff ff ff ff
      5. 在写应用程序的时候,我们看到的都是虚拟地址
      6. 在32位操作系统中,虚拟内存被分为两个部分,3G的用户空间和1G的内核空间,其中用户空间是当前进程私有的,内核空间是一个系统中所有进程公有的。

      虚拟内存分区(运行程序时进行分区) 

      1. 堆:在动态申请内存的时候在堆里开辟内存
      2. 栈:主要存放局部变量
      3. 静态全局区:(1)未初始化的静态全局区:静态变量(定义便来嗯的时候,前面加static修饰),或全局变量,没有初始化的,存在此区。(2)初始化的静态全局区:全局变量,静态变量,赋值的存在此区。
      4. 代码区:存放程序代码
      5. 文字常量区:存放常量

      2. 全局变量

      普通的全局变量

      概念:在函数外部定义的变量

      #include<stdio.h>
      int a = 10;  // 普通全局变量
      int main(){
          printf("a的数值是%d\n",a);
          return 0;
      }
      

      作用范围:程序的所有地方,只不过用之前需要声明,例如 extern int a;

      生命周期:一直到程序运行结束。

      注意:定义普通全局变量时,如果不赋值,默认为0

      静态全局变量

      概念:定义全局变量的时候,前面加一个static修饰

      作用范围:static限定了静态全局变量的作用范围,只能在它定义的.c文件中有效

      声明周期:直到程序结束

      注意:不赋值默认为0

      #include<stdio.h>
      static int a = 10;  // 静态全局变量,不能跨文件使用
      int main(){
          printf("a的数值是%d\n",a);
          return 0;
      }
      

      3. 局部变量

      普通局部变量

      概念:在函数内部定义的,或者复合语句中定义的变量

      作用范围:在函数中定义的变量,在函数中有效。在复合语句中定义的,在复合语句中有效

      生命周期:在函数调用之前,局部变量不占用空间,调用的时候才为局部变量开辟空间,函数结束了,局部变量就释放了。复合语句中也是如此。

      #include<stdio.h>
      void myfunc(){
          int a = 10;   // 局部变量
          printf("a的数值是%d\n",a);
          return;
      }
      int main(){
          myfunc();
        //  printf("a的数值是%d\n",a); 这条语句是错误的,main不可以调用myfunc中的变量a
          return 0;
      }
      

      静态局部变量

      概念:定义局部变量的时候,前面加static修饰

      作用范围:在它定义的函数或复合语句中有效

      生命周期:第一次调用函数的时候,开辟空间赋值,函数结束后,不释放,以后再调用函数的时候,就不再为其开辟空间,也不赋初值,用的是以前哪个变量。

      #include<stdio.h>
      void myfunc(){
          static int a = 10;   // 静态局部变量
          printf("a的数值是%d\n",a);
          return;
      }
      int main(){
          myfunc();
          return 0;
      }
      

      4. const不可赋值变量

      const 关键字用来声明不可赋值的变量

      #include<stdio.h>
      int main(){
          const int num;
          num = 7;  // 这条语句必报错
          printf("num是%d\n",num);
          return 0;
      }
      

      报错如下:

      C语言由浅入深了解变量的应用

      既然不可以赋值,那有什么用呢?可以在初始化的时候进行赋值!

      #include<stdio.h>
      int main(){
          const int num = 8;
          printf("num是%d\n",num);
          return 0;
      }
      

      5. volatile多变的变量

      volatile关键字用来声明多变的变量,这种变量的内容随时可能被改变,而且这种改变的原因不是我们的语句造成的

      声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。