所谓**块,是由包围**。 块在 C 语言中随处可见,例如函数体、选择结构、循环结构等。 不包含块的 C 程序根本无法运行,即使是最简单的 C 程序(如上一节所示)也无法运行。
C 允许您在块内定义变量,该块具有块级范围;换句话说,在块内定义的变量只能在块内使用,并且在块外时无效。
现在我们已经讨论了函数,在函数内部定义的变量称为局部变量,我们将继续讨论选择结构和循环结构。
例 1] 定义了一个函数 gcd() 来查找两个整数的最大公约数。
#include运行结果:函数声明。 int gcd(int a, int b);你也可以写 int gcd(int, int);
int main()。
int n = 40;数
printf("block n: %d", n);
printf("main n: %d", n);
return 0;
block n: 40
main n: 22
这里有两个 n,它们位于不同的作用域中,不会产生命名冲突。 作用域小于 main(),内部 printf() 使用编号的 n,main() 内部的 printf() 使用编号的 n。
每个 C 程序都包含多个作用域,同名的变量可以出现在不同的作用域中,C 语言将按照从小到大的顺序逐层搜索父作用域中的变量,如果在最顶层的全局作用域中没有找到该变量,则会报错。
让我们用一个特定的**来演示:
#include下图说明了本节的范围:int m = 13;
int n = 10;
void func1(){
int n = 20;
int n = 822;
printf("block1 n: %d", n);
printf("func1 n: %d", n);
void func2(int n){
for(int i=0; i<10; i++)
if(i % 5 == 0){
printf("if m: %d", m);
else{int n = i % 4;
if(n<2 &&n>0){
printf("else m: %d", m);
printf("func2 n: %d", n);
void func3(){
printf("func3 n: %d", n);
int main(){
int n = 30;
func1();
func2(n);
func3();
printf("main n: %d", n);
return 0;
蓝色表示作用域的名称,红色表示作用域中的变量,global 表示全局作用域。 在灰色背景的范围内,我们使用 m 变量,它在全局范围内,因此我们必须通过几层范围才能找到 m。
这就是这次的全部内容