用不同数据类型定义同一变量时C代码的工作
我无意中命名了一个变量两次,但数据类型不同。它错过了编译错误,因为一个在用不同数据类型定义同一变量时C代码的工作,c,C,我无意中命名了一个变量两次,但数据类型不同。它错过了编译错误,因为一个在main()中,另一个在while()循环的main()中 所以我做了一个这样的代码 #include <stdio.h> int main() { int t; scanf("%d",&t); while(t>0) { double t; scanf("%lf",&t); printf("%lf\n",t);
main()
中,另一个在while()
循环的main()
中
所以我做了一个这样的代码
#include <stdio.h>
int main()
{
int t;
scanf("%d",&t);
while(t>0)
{
double t;
scanf("%lf",&t);
printf("%lf\n",t);
t--;
}
return 0;
}
#包括
int main()
{
int t;
scanf(“%d”、&t);
而(t>0)
{
双t;
扫描频率(“%lf”、&t);
printf(“%lf\n”,t);
t--;
}
返回0;
}
在这里,我注意到这个节目永远不会结束!对于double t
的任何输入值,无论是负值、正值还是零,while()
循环都不会终止
有人能解释一下为什么会发生这种情况吗?while循环是如何在那里终止的?你自己说的。有两个变量名为
t
,作用域不同
您声明的double t
具有在while循环内执行的块的范围。while循环中的条件使用在while循环周围的作用域中声明的t
(int t
),该作用域从不被修改(因为循环隐藏t
并修改双t),因此它永远不会达到0
以下是关于C中变量范围的一些要点:
- 块继承所有全局变量
- 在块内声明的变量仅在块内有效
- 块可以嵌套
- 嵌套块从外部块继承变量
- 可以在嵌套块中声明变量,以隐藏外部块中的变量(例如在您的示例中)
- 隐藏变量根本无法访问,除非使用在其仍然可见时创建的指针
- 虽然严格来说,隐藏变量不是一个错误,但它几乎从来都不是一件好事,而且大多数编译器在隐藏变量时都会发出警告李>
int
,另一个是while循环范围内的double
。在while循环中,双t隐藏int t,scanf设置双t
while循环如何在那里终止
程序不能像写入时那样从while循环内部终止。当执行语句
t--
时,它引用了在同一块中先前声明的(double t
)变量,因此您的int t
在外部块范围内,它被double t
隐藏,从不递减。如果我将t
的双精度值设为0或负值会怎么样?它已经不接受while循环的条件,因此循环应该中断?无论您给t什么,因为后面有一个scanf函数,分配的值将被覆盖。这是一个很好的问题。但我希望现在对你们来说这纯粹是学术性的。也就是说,我希望您刚刚重新命名了t
-变量的名称。+1我知道“隐藏”变量根本无法访问,除非使用在仍然可见时创建的指针。
while(t>0)//int t;
{
{
double t;
scanf("%lf",&t);
printf("%lf\n",t);
}
t--;
}