回 帖 发 新 帖 刷新版面

主题:一个有关作用域的问题

代码如下
#include<stdio.h>
int main(void)
{
    int n=10;

    printf("Initially n=%d &n=%p\n",n,&n);
    for(int n=1;n<3;n++)
    printf("Loop 1 n=%d &n=%p\n",n,&n);
    printf("After loop 1 n=%d &n=%p\n",n,&n);
    for(int n=1;n<3;n++)//<1>
    {
        printf("Loop 2 index n=%d &n=%p\n",n,&n);
        int n=30;//<2>
        printf("Loop 2 n=%d &n=%p\n",n,&n);
        n++;//<3>
    }
    printf("After loop 2 n=%d &n=%p\n",n,&n);
    return 0;
}
使用的是C99标准。
问题:在第二个循环中,for语句中声明的n和循环体内声明的n为什么不冲突内?为什么循环体内第二个printf()输出的是循环体内的n而第一个printf()输出的是for中的n?<3>所在行的n++为什么是对for中声明的n操作呢?

回复列表 (共3个回复)

沙发

作用域遵循“就近原则”
所以《1》和《2》就不用说了,但《3》你确定是对循环声明的n做操作么?个人觉得应该是对循环内的n进行操作的。

板凳

<3>看来是我搞错了,不好意思。但是for里面的n和循环体内的n的作用域为什么不一样呢?

3 楼

1的作用域是整个循环;
2的作用域是从它出现开始到大括号(定界符)结束。
这样当然就不一样了:)

我来回复

您尚未登录,请登录后再回复。点此登录或注册