变量在各各领域的作用域
#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", n++); // 0 1 2 3 4 5 } int main(void) { // g_number1 = g_number2 = 10; // 输出的是全局变量的 number,因为这个时候只看得到它 printf("number = %d\n", number); // 局部变量: 定义在任何一个花括号中的变量就是局部变量 // 作用域: 局部变量的作用域是定义位置到所在花括号结束 // 生命周期: 进入花括号到离开所在花括号 int number = 0; // L19 ~ L31 // 输出的是局部变量 number 的值,在这个时候,存在大小两 // 个作用域,且存在同名变量,一旦遇到这种情况,实际使用 // 的就是小作用域的变量。 printf("number = %d\n", number); { int number = 0; // L12 ~ L13 printf("number = %d\n", number); } for (int i = 0; i < 10; ++i) // L15 ~ L18 { int number = 0; // L17 ~ L18 } // C 语言中的 const 常量,使用 const 定义的值必 // 须初始化,且在程序的运行过程中不能被修改 const int n = 10; return 0; }