#include <stdio.h>
int main(){
int a=1,b=3;
{
int a=1,c=2;
a=a+b;
b=c+a;
printf("a=%d,b=%d\n",a,b);
}
printf("a=%d,b=%d\n",a,b);
return 0;
}
编译器输出是
a=4,b=6
a=1,b=6
请问第二个输出的时候,为什么b是6呢
b=c+a是再a=a+b之后执行的,a=a+b时,a的值变为4,而之后算b=c+a的时候,c=2,a=4的情况下,b=6啊
你没在括号内定义b
所以b一直是全局变量
你在括号外定义的a的全局变量
括号内又定义了a,是局部变量
所以a有2次不同值的输出
b只定义了全局变量
你在{}内将b再定义一次,就会输出正确了。
变量的使用需要遵循最基本的两项要求:
1. 就近原则:当全局变量和局部变量出现变量名称相同,程序调用变量时,将会使用局部变量作为当前变量,
实际上全局变量和局部变量是两个完全不同的变量,拥有相互独立的内存空间,使用上也不相互影响。
2. 作用域: 局部变量的有效范围从当前代码块始到当前代码块终。
在main函数中包含大括号中的声明的变量a只在大括号中有效,在大括号内调用的任何有关a变量的引用,
均是指在大括号内声明a变量,而不是在main函数起始声明的a变量。
当代码块结束,代码块所占用的资源被释放,此时对a变量的引用为main函数起始时声明的a变量
括号里的b哪里是局部变量了,b是在代码块外面定义的,只是在代码块里面对它赋值,最后输出的肯定是6啊