C语言

12-变量类型

2020-05-29  本文已影响0人  Andy_Livings

C语言有丰富的数据类型和运算符,因此计算能力非常强大,计算过程中使用的值一般用变量来存储。变量也是有分类型的,不同类型的变量有不同的存储类型、不同的生命周期、不同的作用域,C语言也提供了一些关键字来设置变量的属性(比如设置存储类型、生命周期)。

一、变量的作用域

C语言根据变量作用域的不同,将变量分为局部变量和全局变量。

1.局部变量

1> 定义:在函数内部定义的变量,称为局部变量。形式参数也属于局部变量。
2> 作用域:局部变量只在定义它的函数内部有效,即局部变量只有在定义它的函数内部使用,其它函数不能使用它。

2.全局变量

1> 定义:在所有函数外部定义的变量,称为全局变量。
2> 作用域:全局变量的作用范围是从定义变量的位置开始到源程序结束,即全局变量可以被在其定义位置之后的其它函数所共享。

  int a;
  
  int main ()
  {
      int b;
      return 0;
 }

第1行的变量a是全局变量,第5行的变量b是局部变量。

二、变量的存储类型

1.自动变量

1> 定义:自动变量是存储在堆栈中的。
2> 哪些是自动变量:被关键字auto修饰的局部变量都是自动变量,但是极少使用这个关键字,基本上是废的,因为所有的局部变量在默认情况下都是自动变量
3> 生命周期:在程序执行到声明自动变量的代码块(函数)时,自动变量才被创建;当自动变量所在的代码块(函数)执行完毕后,这些自动变量就会自行销毁。如果一个函数被重复调用,这些自动变量每次都会重新创建。

  void test(int a, int b) {
      int c = a + b;
      
      auto int d;
  }

第1行的变量a、b,第2行的变量c、第4行的变量d都是自动变量。

2.静态变量

1> 定义:静态变量是存储在静态内存中的,也就是不属于堆栈。
2> 哪些是静态变量:

  #include <stdio.h>
  
  int a;
  
  void test() {
      static int b = 0;
      b++;
      
     int c = 0;
      c++;
      
      printf("b=%d, c=%d \n", b, c);
  }
  
  int main() {
      int i;
      // 连续调用3次test函数
      for (i = 0; i<3; i++) {
          test();
      }
      
      return 0;
23 }
3.寄存器变量

1> 定义:存储在硬件寄存器中的变量,称为寄存器变量。寄存器变量比存储在内存中的变量访问效率更高(默认情况下,自动变量和静态变量都是放在内存中的)

2> 哪些变量是寄存器变量:

3> 生命周期:因为寄存器变量本身就是自动变量,所以函数中的寄存器变量在调用该函数时占用寄存器中存放的值,当函数结束时释放寄存器,变量消失。

4> 使用注意:

1 int main() {
2     register int a;
3     return 0;
4 }

第2行的变量a是个寄存器变量。




三、程序实现

01-变量类型

int age;

void variable_types_test() {
    int age;
    age = 10;
}
void variable_types(void) {
    
    /*
     根据变量的作用域,可以分为:
     1.局部变量:
     1> 定义:在函数(代码块)内部定义的变量(包括函数的形参)
     2> 作用域:从定义变量的那一行开始,一直到代码块结束
     3> 生命周期:从定义变量的那一行开始分配存储空间,代码块结束后,就会被回收
     4> 没有固定的初始值
     
     2.全局变量
     1> 定义:在函数外面定义的变量
     2> 作用域:从定义变量的那一行开始,一直到文件结尾(能被后面的所有函数共享)
     3> 生命周期:程序一启动就会分配存储空间,程序退出时才会被销毁
     4> 默认的初始值就是0
     */
    
    printf("age = %d\n", age);// 0
    int age = 20;
    
    printf("age = %d\n", age);// 20
    variable_types_test();
    
    printf("age = %d\n", age);// 20
}

02-变量类型练习

// 全局变量:a、b、c
// 局部变量:v1、v2、e、f
// 变量a的初值是10
int a = 10;

// 变量b的初值是0
// 变量c的初值是20
int b , c = 20;

int variable_types_practice_sum(int v1, int v2) {
    return v1 + v2;
}

void variable_types_practice_test() {
    b++;
    
    int i = 0;
    i++;
    
    printf("b = %d, i = %d\n", b, i);
}

void variable_types_practice(void) {
    
    variable_types_practice_test();
    variable_types_practice_test();
    variable_types_practice_test();
    
    int e = 10;
    
    {
        {
            int f = 30;
        }
    }
}
上一篇 下一篇

猜你喜欢

热点阅读