定义:
局部变量:在函数内部或代码块内部定义的变量,无法被外部函数直接应用
全局变量:在所有函数外部定义的变量
注意!!!
全局变量在函数内如果是以定义的形式再次使用(比如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;
}