#include<stdio.h>
int main(){
int a=10;
{ printf("%d",a);
int a=20;
printf("%d",a);
}
printf(" %d",a);
return 0;
}
Output:10 20 10
在上面的代码中,我了解变量 a(内部块内)的可见性仅在该块内具有范围,因此我得到了该特定输出。但是在该块之外声明的变量 a 即使在内部块内也应该有它的范围......因此我怎么可能再次输入int a=20;
它不应该给我一个错误,比如“重新定义 a”和“先前的声明”一个在这里”。就像我使用
int b=10;
int b=15;
我的第二个问题是这个
void main() {
static int a=10;
{
printf("%d ",a);
static int a=20;
printf("%d",a);
}
printf(" %d",a);
}
除了与前面的代码相同的疑问之外,为什么我没有收到像“重新定义 a”这样的错误,这是我与此代码相关的疑问。
对于上面的代码,我得到了相同的Output: 10 20 10
结果,但我所期望的是
10 20 20
我的意思是在内部块中,一旦将静态 int a 重新初始化为 20,即使它退出块后它也不应该是相同的值吗?因为静态变量的作用域是整个程序。