可以在函数体中的任何位置定义变量,变量仅存在于定义它们的块中。变量在下一个右括号中不再存在。在外部块的开头声明的变量存在于内部块中。
在块结束时声明和销毁时创建的变量称为自动变量。给定变量可见的范围称为变量范围。如果尝试引用其范围之外的变量,则会出现编译时错误。
以下代码片段显示了变量范围:
{
int a = 0; // 创建一个变量 a
// 在这里引用变量 a 正常
// 这里引用变量 b 会引发一个错误 - 因为它尚未创建
{
int b = 10; // 创建一个变量 b
// 在这里引用变量 a 和变量 b 都没有问题
} //变量 b 在这里已经销毁了
// 这里引用变量 b 会引发一个错误 - 因为变量 b 已经销毁了
// 这里可以引用变量 a ,没有问题。
}
示例代码
#include <stdio.h>
int main(void)
{
int count1 = 1; // 在外部块声明
do
{
int count2 = 0; // 在内部块声明
++count2;
printf("count1 = %d count2 = %d\n", count1, count2);
} while (++count1 <= 5);
// count2 不再存在了
printf("count1 = %d\n", count1);
system("pause");
return 0;
}
执行上面示例代码,得到以下结果:
count1 = 1 count2 = 1
count1 = 2 count2 = 1
count1 = 3 count2 = 1
count1 = 4 count2 = 1
count1 = 5 count2 = 1
count1 = 6