在C语言中,变量的作用域定义了变量在程序中的可访问范围。根据作用域的不同,变量可以分为局部变量和全局变量。
1.局部变量
局部变量是在函数或代码块内部声明的变量,它们只能在该函数或代码块内部被访问。例如,在main函数内部定义的变量a、b和c只能在main函数内部使用,一旦超出这个范围,这些变量就不再有效。同样的规则适用于if、else、while、do while、for和switch等结构化语句内部定义的变量。
错误代码
#include<stdio.h>
//局部变量
void a(){
int b=1;
printf("%d \n",b);
}
int main(){
a();
printf("%d",b);
}
会报错,在函数main()中定义的int b=1,是局部变量,其作用域只在a()函数的花括号{}范围内,变量b就会被销毁,main函数无法识别和访问它
改正代码
#include<stdio.h>
//局部变量
void a(){
int b=1;
printf("%d \n",b);
}
int main(){
a();
int b=1;
printf("%d",b);
}
输出如下
2.全局变量
与局部变量相对的是全局变量,它们在函数外部定义,通常位于程序的顶部。全局变量在整个程序的生命周期内都有效,可以被任何函数访问。例如,如果在a.c文件中定义了全局变量a和b,那么在b.c文件中可以通过extern关键字声明来访问这些变量。
#include<stdio.h>
//全局变量
int a=1;
void b(){
a=2;
printf("%d \n",a);
}
int main(){
b();
printf("%d",a);
}
输出如下(开始a=1,经过void,a变成2,main也就变成了2)
3.作用域的注意事项
如果全局变量和局部变量同名,那么在局部变量的作用域内,局部变量会覆盖全局变量。这种情况下,应该避免使用相同的名称,以免造成混淆。此外,全局变量和静态局部变量存储在内存的静态存储区中,而非静态局部变量存储在栈中。
4.练习
#include<stdio.h>
int a=200;
int b=100;
void lll(){
int a=1;
b=2;
printf("a=%d,b=%d \n",a,b);
}
int main(){
lll();
printf("a=%d,b=%d",a,b);
}
输出如下(int a=200是赋值,不影响下面代码,b=2会改变b的值,下面会跟着改变)
5.有参数
#include<stdio.h>
void z(int m){
m+=10;
}
int main(){
int m=1;
printf("%d \n",m);
z(m);
printf("%d",m);
}
输出如下
6,有参数练习
#include<stdio.h>
void ab(int x,int y){
x+=1;
y-=1;
}
int main(){
int x=10;
int y=10;
ab(x,y);
printf("x=%d,y=%d",x,y);
}
输出如下
7.报错
#include<stdio.h>
//局部变量的产生
int main(){
//循环变量i,只能在循环内部使用
for(int i=0;i<10;i++){
}
printf("i=%d",i);
}
循环变量i,只能在循环内部使用
8.报错2
#include<stdio.h>
//局部变量的产生场景
//1.for(i)
//2.if(){} while(){} {}里面也是局部变量
int main(){
if(1){
int i=1;
printf("i=%d",i);
}
printf("i=%d",i); //2
}