【问题标题】:Why redeclaration of variable is allowed inside loop and if condition which are declared out side of loop or if condition already? [duplicate]为什么在循环内允许重新声明变量以及在循环外声明的 if 条件或 if 条件已经? [复制]
【发布时间】:2016-02-16 10:36:50
【问题描述】:
#include <stdio.h>

int main()
{
    int a=9;
    if(a<10){
        int a = 20;
        ++a;
        printf("%d\n",a);
    }
    printf("%d\n",a);
}

为什么在循环和 if 条件中允许重新声明 a?
为什么我们不能在循环或 if 语句中增加或减少在循环或 if 语句之外声明的变量??

【问题讨论】:

    标签: c


    【解决方案1】:

    这不是“重新声明”,它是一个全新的同名变量的声明。在 if 语句中对 a 的所有访问都将引用值为 20 的新局部变量 a,而不是引用先前分配的值为 9 的局部变量。

    允许它的原因是因为它允许您为局部变量命名,而不必担心其他地方已经采用了哪些名称。

    这主要是局部作用域和全局作用域之间的问题,但相同的规则递归地应用于局部作用域内的局部作用域。

    如果不允许,维护大型项目将非常困难,因为您会不断遇到命名冲突。

    一般来说,在不同的范围内为不同的变量赋予相同的名称被认为是非常糟糕的做法,您应该尽可能避免这样做。

    【讨论】:

      【解决方案2】:

      嵌套块内的变量可以与外部块的变量同名。这称为名称隐藏。

      嵌套块中定义的变量“隐藏”了外部块的变量。

      在嵌套块的末尾,该块的局部变量被销毁。所以printf语句是用main函数开头定义的变量来执行的。

      【讨论】:

        【解决方案3】:

        我认为您期望更改,即重新分配 a 的值,而不是重新声明。所以,内部循环就像a=20 而不是int a=20

        不能对同一个变量重新声明。一旦声明了任何变量,就会为其分配内存。如果你重新声明它会产生冲突或错误。

        【讨论】:

        • 我将 int 用于 'a' 两次,所以它是重新声明。
        猜你喜欢
        • 2014-06-15
        • 1970-01-01
        • 2021-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-06
        • 1970-01-01
        相关资源
        最近更新 更多