gpt4 book ai didi

c - 使用不同数据类型定义同一变量时 C 代码的工作方式

转载 作者:行者123 更新时间:2023-12-02 21:27:44 25 4
gpt4 key购买 nike

我在不知不觉中两次命名了一个变量,但数据类型不同。它错过了编译错误,因为一个位于 main() 中,另一个位于 main()while() 循环中。

所以我编写了这样的代码。

#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;
}

在这里我注意到程序永远不会结束!对于任何 double t 输入值(负数、正数或零),while() 循环永远不会终止。

谁能解释一下为什么会发生这种情况? while 循环如何在那里终止?

最佳答案

你自己也说了。您有两个名为 t 且作用域不同的变量。

您声明的 double t 具有在 while 循环内部执行的 block 的范围。 while 循环中的条件使用在 while 循环周围的范围内声明的 t (int t),该范围永远不会被修改(因为循环隐藏了 t 并修改双 t),因此它永远不会达到 0。

以下是有关 C 中变量范围的一些要点:

  • block 继承所有全局变量
  • block 内声明的变量仅在 block 内有效
  • block 可以嵌套
  • 嵌套 block 继承外部 block 的变量,
  • 可以在嵌套 block 中声明变量以隐藏外部 block 中的变量(例如您的情况)

编辑

正如 @pmg 所建议的,这里有一些额外的要点:

  • 隐藏变量根本无法访问,除非使用它仍然可见时创建的指针
  • 虽然严格来说,隐藏变量并不是一个错误,但它几乎从来都不是一件好事,大多数编译器都会在隐藏变量时发出警告!

关于c - 使用不同数据类型定义同一变量时 C 代码的工作方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23117521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com