下面的程序。
#include <stdio.h>
int main()
{
char i='u';
for (int i=0;i<=3;i++)
{
printf("%d\n",i);
}
return 0;
}
在新的行中打印0,1,2,3, 因为字符变量… i
在for循环外声明的是 “隐藏”。但是,下面的程序。
#include <stdio.h>
int main()
{
char i='u';
for (int i=0;i<=3;i++)
{
int i=8;
printf("%d\n",i);
}
return 0;
}
在新的行上打印8个 “4”,就像变量一样。i
初始化为8,具有 更优先 比变数 i
(计数器)从0到3 。
该 i
中的初始化和 i
顺带 同属一个区块但其中一个似乎比另一个更优先。这种优先权是否真的存在,如果存在,是否有明确的优先顺序?
解决方案:
你所说的 “优先级 “其实是指的是 范围.
每个变量和函数都有一个包围的作用域,在这个作用域中,变量的名称是有效的,并且它有特定的寿命。 如果一个作用域中的变量与上一个作用域中的变量名称相同,那么外层作用域中的变量被遮挡,只有最内层作用域中的变量可见。
在一个变量在初始化部分声明的情况下,一个 for
循环中,这些变量的作用域在其他部分的 for
以及循环体。 如果循环体是一个复合语句,则以 另一个 作用域,而在这里声明的变量将在更高的作用域掩盖同名变量。
所以在你的第二个程序中,你有三个变量,分别命名为 i
:
- 第一部分的范围
i
是主体的main
功能。 - 第二项的范围是:
i
是for
声明的范围。 - 第三条的范围
i
是主体的for
语句。
本文来自投稿,不代表运维实战侠立场,如若转载,请注明出处:https://www.shizhanxia.com/1508.html