https://blog.youkuaiyun.com/walle2018/article/details/79778312
一. 在函数内部
1.在函数中
在main函数内部定义了一些变量并使用它们如下面代码块:
像这样在函数内部的变量(并非只有main函数,所有函数都一样)被称为局部变量,
它们的作用域就是当前函数内部。也就是说,这些变量只能在其内部使用,而不能在函数外部使用。
int main(int argc, char *argv[])
{
int a;
int b;
int c;
//do something
return 0;
}
2. 在下面的结构语句中
结构化语句if else、
while、
do while、
for、
switch等,这些结构内部也可以定义变量,例如:
if (is_true)
{
int a;
int b;
//do something
}
else
{
int c;
int d;
//do something
}
while (is_true)
{
int a;
int b;
//do something
}
for (int i = 0; i < 10; i++)
{
int a;
int b;
//do something
}
switch (val)
{
case 1:
{
int a;
int b;
//do something
break;
}
case 1:
{
int a;
int b;
//do something
break;
}
default:
{
int a;
int b;
//do something
break;
}
}
注意,当一个嵌套结构中出现两个不同作用域的变量时,变量的名称可以相同,在使用时以其小作用域为准。
int main(int argc, char *argv[])
{
int a;
int b;
//do something
for (int i = 0; i < 10; i++)
{
int a;
int b;
//do something
if (i == 4)
{
int a;
int b;
//do something
}
}
//do something
return 0;
}
二、全局变量
与局部变量相对的就是全局变量,
我们把定义在函数外部的变量称为全局变量,
这些变量的作用域为整个程序
/* a.c */
int a;
int b;
int afunc(void)
{
a = 2;
b = a;
//do somethine
return 0;
}
另外
多个源文件一起编译,那么全局变量在其它文件中是否也生效呢?答案是肯定的。当我们在a.c文件中定义了一个全局的变量i,而在另一个源文件b.c中是无法直接使用这个变量的,我们需要使用extern关键字在函数外部声明一个文件外部变量
/* b.c */
extern int a;
extern int b;
int bfunc(void)
{
a = 2;
b = a;
//do somethine
return 0;
}
这样就可以在b.c中使用a.c中定义的变量了。注意extern int a;和extern int b;只是告诉编译器,在当前文件中需要使用当前文件外部的全局变量,而不是定义这些新变量。当然,这些变量在b.c中也是全局的