c中的变量隐藏和 "优先权"[重复]


下面的程序。

#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 功能。
  • 第二项的范围是: ifor 声明的范围。
  • 第三条的范围 i 是主体的 for 语句。

本文来自投稿,不代表运维实战侠立场,如若转载,请注明出处:https://www.shizhanxia.com/1508.html

(0)
上一篇 2022年6月29日 下午4:08
下一篇 2022年6月29日 下午4:08

相关推荐

发表评论

登录后才能评论