局部变量or全局变量

69 阅读2分钟

定义

局部变量:在函数内部或代码块内部定义的变量,无法被外部函数直接应用

全局变量:在所有函数外部定义的变量

注意!!!

全局变量在函数内如果是以定义的形式再次使用(比如int a = 0)是局部变量,不改变全局变量。若是赋值的形式使用(比如 a=参数 ),则改变全局变量(对全局变量重新赋值),这个叫做变量作用域和"遮蔽"规则

示例代码如下:

#include <stdio.h>

/* 全局变量 - 定义在所有函数外部 */
int global_var = 100;  // 可在本文件的所有函数中访问
void func1();
void func2();

int main() {
    /* 局部变量 - 定义在函数内部 */
    int local_main = 10;
    
    printf("主函数中:\n");
    printf("  local_main = %d\n", local_main);  // 正确:可以访问局部变量
    printf("  global_var = %d\n", global_var);  // 正确:可以访问全局变量
    
    func1();
    func2();
    
    // printf("x = %d\n", x);  // 错误:x是func1的局部变量,不能在此访问
    
    return 0;
}

void func1() {
    /* 局部变量 - 只在func1中有效 */
    int x = 20;
    int local_main = 30;  // 与main中的local_main同名但不同变量
    
    printf("func1函数中:\n");
    printf("  x = %d\n", x);
    printf("  local_main = %d\n", local_main);  // 输出30,不是main中的10
    printf("  global_var = %d\n", global_var);
    
    global_var = 200;  // 可以修改全局变量
}

void func2() {
    printf("func2函数中:\n");
    // printf("x = %d\n", x);  // 错误:x是func1的局部变量
    printf("  global_var = %d\n", global_var);  // 输出200,已被func1修改
}

以下是以赋值形式修改全局变量的示例:

#include<stdio.h>

int a = 200;  // 全局变量

void f() { 
    a = 2;      // 重新赋值全局变量
    printf("%d\n", a);  // 输出 2
}

int main() {
    f();
    
    printf("%d\n", a);  // 输出 2
    
    return 0;
}