我们来看二段代码:
//test1
//test1.c
#include <stdio.h>
#include <string.h>
void east_travel(void); //函数声明
char master[16] = "女娲"; //全局变量
void west_travel(void) {
char master[16] = "唐僧"; //局部变量master的作用域,覆盖了全局变量master的作用域
printf("[西游]老大是: %s\n", master);
}
int main(void) {
char master[16] = "如来佛";
printf("[main]老大是: %s\n", master);
char c;
printf("是否进入女儿国? (Y或N)\n");
fflush(stdin);
scanf("%c", &c);
if (c=='Y' || c=='y') { //一对大括号里面就一块新的地盘,可以定义新的变量,名称可以跟外面的一样
char master[16] = "女王";
printf("[main-女儿国]老大是: %s\n", master);
}
printf("[main]老大是: %s\n", master);
east_travel(); //调用函数,函数在另外一个文件中!
return 0;
}
//test2
//test2
#include <stdio.h>
extern char master[16]; //引用其他文件中定义的全局变量!
void east_travel(void) {
printf("[东游]老大是: %s\n", master);
}
编译两个关联文件时,用: gcc test1.c test2.c 执行的结果是:
我们看出,在具体的某个函数内部,局部变量作用大于全局变量。
跨文件调用时,只能调用全局变量,局部变量不能调用