Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c在循环内和循环外的变量重新声明?_C_Variables_For Loop_Redeclaration - Fatal编程技术网

c在循环内和循环外的变量重新声明?

c在循环内和循环外的变量重新声明?,c,variables,for-loop,redeclaration,C,Variables,For Loop,Redeclaration,当inti时语句在一个程序中声明了2次,它显示错误,但当inti写在运行两次的for循环中,它不会显示任何错误 #include<stdio.h>//code 1 showing error int main() { int i; int i; return 0; } #包括//显示错误的代码1 int main() { int i; int i; 返回0; } #包括//代码2无错误 int main() { 对于(int j=1;j,这是因为声明变量的

inti时语句在一个程序中声明了2次,它显示错误,但当
inti写在运行两次的for循环中,它不会显示任何错误

#include<stdio.h>//code 1 showing error
int main()
{
    int i;
    int i;
    return 0;
}
#包括//显示错误的代码1
int main()
{
int i;
int i;
返回0;
}
#包括//代码2无错误
int main()
{

对于(int j=1;j,这是因为声明变量的作用域仅在您声明它的代码块内,而在该块外看不到它


我现在已经看过你的代码了。很明显,在1.代码中,你声明了两个名称相同的整数,这是不允许的;在2.代码中,你声明了两个名称不同的整数,这很好。

为了理解你的问题,也称为变量的作用域,让我们看看下面的示例程序:

#包括
int main(int argc,char*argv[])
{
int I=-1;
对于(int I=0;I<3;I++){
printf(“%d\n”,I);
}
printf(“%d\n”,I);
{
int I=200;
printf(“%d\n”,I);
}
返回0;
}
如您所见,我声明了变量I三次

在循环中声明时,结果将打印以下值:

0
1
2
在for循环之后,当我再次打印I变量时,现在我引用在for循环之外声明的变量,第一个I声明,因此结果将是:

-一,

现在,如果我用大括号打开一个新范围,并声明一个名称相同但值不同的新变量,我将得到:

二百


我希望我对变量范围的描述现在清楚了

第一个
main
尝试定义两个标识符相等的变量。这显然是被禁止的,并且会导致编译错误

第二个
main
包含一个
for
-loop。for
-loop引入了一个新的作用域,如果不添加大括号,它只包含下一个语句或定义(即
int i;
)。
i
每个迭代分配和取消分配,因此它实际上一次只存在一次。所有定义的
i
都在不同的范围内。因此没有命名冲突


如果外部作用域中有一个变量(即
main
的函数作用域)和内部作用域中有一个变量(即
for
-循环的
作用域),则内部作用域中的变量会隐藏外部作用域中的变量,从而使外部作用域变量无法访问

C11标准规定,§6.2.1.4:

在内部范围内,标识符指定声明的实体 在内部作用域中,隐藏在外部作用域中声明的实体 (且不可见)在内部范围内


对于循环运行它两次,第二代码不是C。它不编译。但是,它是有效的C++。你不能有2个同名的变量(这就是第一个代码中出现的错误)。第二代码是好的,因为你没有用相同的名字声明2个变量(你已经声明int j为第一,int i作为第二个变量)。.我只能对你说这些,明白吗?
0
1
2