在c语言中,变量有全局变量和局部变量之分,这一点和很多高级语言类似,如c#,java等。不过与c#,java中的局部变量如在全局变量作用域内则不允许与全局变量名相同,而c语言是允许这样做的。这样的做法极不提倡,但是c语言既然允许这么做,就分析一下其变量名相同时在不同位置调用该变量名时所实际调用的是哪个变量值。
#include <stdio.h>
//全局变量
//作用域:从定义开始到文件结束
//默认初始值为0
int c = 1;
//当在调用变量时有多个同名变量起作用的时候
//则使用作用域离自己最近的变量
void main(void)
{
//这个位置只有int c = 1;起作用
printf("全局(1)实际:c:%d\n", c);
//局部变量
//作用域:从定义开始到函数结束
//没有默认初始值
//这个位置int c = 1; int c = 2;都起作用,
//则使用作用域最近的c = 2
int c = 2;
printf("全局(1)局部1(2)实际:c:%d\n", c);
{
printf("{\n");
printf(" 全局(1)局部1(2)实际:c:%d\n", c);
//这个位置int c = 1; int c = 2;int c = 3;都起作用,
//则使用作用域最近的c = 3;
int c = 3;
printf(" 全局(1)局部1(2)局部2(3)实际:c:%d\n", c);
printf("}\n");
}
//这个位置int c = 1; int c = 2;都起作用,
printf("全局(1)局部1(2)局部2(3)实际:c:%d\n", c);
}
运行结果: