C 语言中,变量定义的位置可以分为 3 种:
- 在函数内定义。
- 在函数内的语句块中定义。
- 在函数外部定义。
在函数内部定义的变量被称为局部变量,在函数外部定义的变量被称为全局变量。前几 章编写的 C 程序中只包含一个 main 函数,并且变量也都定义在 main 函数中,因此前几章 中定义的变量都是局部变量。
- 局部变量的作用域
变量的作用域指的是变量的有效作用范围,而局部变量的作用域仅限于函数内部以及语 句块中。 局部变量的作用域需要分 2 种情况来讨论: (1)在函数内部定义的变量只在本函数范围内有效,也就是说只有本函数内才能引用, 本函数之外都不能引用这些变量。 (2)在函数内部语句块中定义的变量,只在本语句块范围内有效,也就是说只有在该语 句块内才能引用,该语句块之外都不能引用这些变量。 【出错的代码】
#include<stdio.h>
int main()
{
{
int a=200;
}
printf("a=%d\n",a);
getchar();
return 0;
}
在 C 语言中,局部变量的作用域以花括号进行区分
#include<stdio.h>
int main()
{
int a=100;
{
int b=200;
printf("a=%d\n",a);
printf("b=%d\n",b);
}
printf("a=%d\n",a);
getchar();
return 0;
}
语句块中可以定义变量,也必须定义在其他语句之前
#include<stdio.h>
int main()
{
int a=100;
printf("hello");
{
int b=200;
printf("a=%d,b=%d\n",a,b);
}
printf("a=%d\n",a);
getchar();
return 0;
}
- 局部变量使用前,必须初始化
在 C 语言中,第一次对变量进行的赋值操作被称为初始化。变量的初始化分为两种情况: 第一种 定义变量并且初始化,例如: int a = 10; //定义并且初始化 第二种 先定义,后初始化,例如: int a; a=10; 变量初始化本质上就是赋值,不过只有第一次给变量赋值才能被称为初始化。而变量赋 值就没有次数限制了,第几次都可以。 在 C 语言中,如果定义了局部变量,但是并未进行初始化,编译器并不会自动初始化局 部变量,该局部变量的值将是未知的。因此,在程序中使用这样的变量是存在风险的。为了 防止这种情况发生,在 VS2012 中,如果程序中使用了没有初始化的局部变量,调试程序的 时候将报错(如果在运行模式下会输出不确定的值),下面通过例子来了解一下。 【出错代码】
#include<stdio.h>
int main()
{
int a;
printf("a=%d\n",a);
getchar();
return 0;
}
运行结果如图所示
|