C语言变量基本类型

在C语言中,变量的存储类型用于定义变量的生命周期和作用域。存储类型主要有以下几种:

  1. 自动存储类型(Auto):自动存储类型的变量通常存储在栈上。这些变量在函数或代码块内声明,并在函数或代码块执行完毕后自动销毁。自动存储类型的变量具有局部作用域,即它们只能在声明它们的函数或代码块内访问。

    示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdio.h>

    void myFunction() {
    int autoVar = 10; // 自动存储类型的变量
    printf("autoVar = %d\n", autoVar);
    }

    int main() {
    myFunction();
    // printf("%d\n", autoVar); // 错误:autoVar 在这里不可访问
    return 0;
    }
  2. 静态存储类型(Static):静态存储类型的变量存储在静态存储区(通常是内存的数据段)。静态存储类型的变量在程序启动时初始化,并在程序结束时销毁。静态存储类型的变量具有局部作用域,但它们的值在函数或代码块执行完毕后仍然保留。

    示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <stdio.h>

    void myFunction() {
    static int staticVar = 10; // 静态存储类型的变量
    printf("staticVar = %d\n", staticVar);
    staticVar++;
    }

    int main() {
    myFunction(); // 输出:staticVar = 10
    myFunction(); // 输出:staticVar = 11
    return 0;
    }
  3. 外部存储类型(Extern):外部存储类型的变量用于声明在其他源文件中定义的全局变量。使用 extern 关键字声明的变量不分配内存空间,它们只是引用其他地方定义的变量。

    示例:
    假设有两个文件:main.cglobals.c

    globals.c

    1
    int globalVar = 100; // 全局变量

    main.c

    1
    2
    3
    4
    5
    6
    7
    8
    #include <stdio.h>

    extern int globalVar; // 使用 extern 声明全局变量

    int main() {
    printf("globalVar = %d\n", globalVar);
    return 0;
    }
  4. 全局存储类型(Global):全局存储类型的变量在整个程序范围内都是可访问的。全局变量在程序启动时初始化,并在程序结束时销毁。全局变量可以在任何源文件中访问,只要在使用前用 extern 关键字声明,或者在同一个源文件中定义。

    示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdio.h>

    int globalVar = 100; // 全局变量

    void myFunction() {
    printf("globalVar = %d\n", globalVar);
    }

    int main() {
    myFunction();
    return 0;
    }

了解这些存储类型及其特点有助于更好地管理变量的生命周期和作用域,以及避免潜在的内存问题。