1.同名变量
(1)不同函数中的局部变量可以同名,全局变量不能同名
(2)当局部变量和全局变量同名时,优先使用局部变量
int var=100;
void f(int var){
var++;
printf("var=%d\n",var);
}
int main(){
int var=10;
f(var); //11
printf("var=%d\n",var); //10
return 0;
}
2.变量的作用域
(1)不同名变量在重叠作用域内可分别访问
(2)在重叠作用域中,只可访问最近定义的同名变量
局部变量的作用域:从定义开始到代码块结束
全局变量的作用域:在程序所有角落都能使用,只有在当前代码文件中能访问并使用
全局数据区中的变量默认初始化为0
静态变量的作用域是整个代码文件
int g=10;
int func(int x){
static int s_var;
s_var+=x;
return s_var;
}
int main(){
for(int i=1;i<=5;i++){
printf("func(%d)=%d\n",i,func(i));
}
printf("func(0)=%d\n",func(0));
printf("global=%d\n",g);
return 0;
}
静态全局变量和全局变量的区别:
- 普通全局变量 :作用域是整个程序 (所有源文件),只要通过
extern声明就能跨文件使用。 - 静态全局变量 :作用域被限制在定义它的源文件内,该文件内的所有函数都能访问,但其他文件完全不可见。
静态局部变量和局部变量的区别:
- 普通局部变量 :存储在栈(stack) 中,栈空间由系统自动分配和释放,特点是轻量但临时;
- 静态局部变量 :存储在全局 / 静态存储区(data segment) 中,该区域的内存从程序启动到结束一直存在。