C for循环内外相同变量的多个声明 #包括 int main() { int i; 对于(i=0;i
而言,循环外部的C for循环内外相同变量的多个声明 #包括 int main() { int i; 对于(i=0;i,c,variable-declaration,C,Variable Declaration,而言,循环外部的i和循环内部的i是两个不同的变量 外部i将在main的整个期间有效 内部i仅在一次循环迭代期间有效 此范围内的内部和外部: #include <stdio.h> int main() { int i; for ( i=0; i<5; i++ ) { int i = 10; printf ( "%d", i ); i++; } return 0; } 由于阴影规则,在上述范围内不
i
和循环内部的i
是两个不同的变量
- 外部
将在i
的整个期间有效main
- 内部
仅在一次循环迭代期间有效i
#include <stdio.h>
int main()
{
int i;
for ( i=0; i<5; i++ )
{
int i = 10;
printf ( "%d", i );
i++;
}
return 0;
}
由于阴影规则,在上述范围内不可能引用外部的阴影
请注意,不可能在同一范围内声明两个同名的变量:
{
int i = 10;
printf ( "%d", i );
i++;
}
一个范围内的变量可以屏蔽更高范围内的变量 在本例中,循环内部定义的
i
屏蔽了外部定义的i
。在循环体中,printf
打印内部i
的值,即10。然后,i++
再次对内部i
进行操作,将其设置为11
当循环到达底部并返回时,内部
i
超出范围。然后for
的第二和第三个子句对外部i
进行操作。当再次输入循环体时,内部i
的新实例被定义并初始化为10。您应该检查以下page提供了变量在C语言中可以具有的不同类型作用域的定义
第一个
int i
在整个块的范围内,第二个int i
仅在该嵌套循环内具有范围。一旦超出嵌套循环,原始块范围版本的i
将再次适用。即使您有的(int i=0;iSee内部范围/外部范围C11§6.2.1 4仅供参考,C标准使用的术语是“隐藏”而不是“阴影”。仅供参考,C标准使用的术语是“隐藏”而不是“遮罩”
{
int i = 0;
int i = 1; // compile-time error
}