变量在各各领域的作用域

#include <stdio.h>

// 作用域: 在哪里能够访问到它
// 生命周期: 内存和变量存在关联的时间

// 全局变量:定义在任何一个花括号之外的变量就是全局变量
//    作用域: 全局变量的作用域是定义位置到所在文件结束【在其它文件中使用 extern 可以访问】
//    生命周期: 整个程序的运行到程序的结束
int g_number = 0;        // g(global) 是全局变量单词的缩写

// 假设不同的作用域存在重名的变量,使用的会是哪个
int number = 200;                    // L12 ~ L32

// 静态全局变量: 使用 static 修饰的全局变量
//    作用域: 全局变量的作用域是定义位置到所在文件结束,【但是其它文件不能访问】
//    生命周期: 整个程序的运行到程序的结束
// 使用 extern 引用一个其它文件中已经声明的全局变量时不能初始化
extern int g_number1;    
// extern int g_number2;    

void test()
{
    // 静态局部变量变量: 使用 static 修饰的局部变量
    //    作用域: 和普通的局部变量完全相同
    //    生命周期: 整个程序的运行到程序的结束
    static int n = 0;

    // 一个静态的局部变量只会在第一次被初始化,之后使
    //    用的都是之前保留的值
    printf("n = %d
", n++);
    // 0 1 2 3 4 5
}

int main(void)
{
    // g_number1 = g_number2 = 10;

    // 输出的是全局变量的 number,因为这个时候只看得到它
    printf("number = %d
", number);

    // 局部变量: 定义在任何一个花括号中的变量就是局部变量
    //    作用域: 局部变量的作用域是定义位置到所在花括号结束
    //    生命周期: 进入花括号到离开所在花括号
    int number = 0;                    // L19 ~ L31

    // 输出的是局部变量 number 的值,在这个时候,存在大小两
    //    个作用域,且存在同名变量,一旦遇到这种情况,实际使用
    //    的就是小作用域的变量。
    printf("number = %d
", number);

    {
        int number = 0;                // L12 ~ L13
        printf("number = %d
", number);
    }

    for (int i = 0; i < 10; ++i)    // L15 ~ L18
    {
        int number = 0;                // L17 ~ L18
    }

    // C 语言中的 const 常量,使用 const 定义的值必
    //    须初始化,且在程序的运行过程中不能被修改
    const int n = 10;

    return 0;
}
原文地址:https://www.cnblogs.com/lianfeng132/p/12358664.html