c - 为什么从循环中重新声明 C 变量不会影响循环?
问题描述
来自这个问题,为什么这个循环仍然运行 5 次?
for(int i = 0; i < 5; i++)
{
int i = 10;
printf("%d\n", i);
}
我猜想当我们重新声明i
时,当i
在 -loop 中被评估时for
,它会在第一个循环之后停止循环。这就像我们刚刚重新分配i = 10;
. 但是,就好像正在创建一个新变量,但循环仍然使用前一个变量。这是如何以及为什么会发生的?
解决方案
这是由于范围。每次使用大括号 {} 时,都会为程序生成一个新范围。一旦退出范围,在该范围中初始化的任何内容都将被删除,对于您来说,当它存在以检查循环条件时,这就是每个循环。
使用我刚才所说的,我们看到您正在重新初始化 i,int i = 10;
这意味着您在此范围内创建了一个名为 i 的新变量,其值为 10。您只需编写即可获得所需的结果,i = 10;
因为它首先会在变量的范围内查找,然后它将在上面的下一个范围内循环,它会在您的 for 循环中找到它。
编辑:
对此进一步评论,这意味着您可以为多个变量使用相同的名称,只要它们彼此位于不同的范围内。像这样:
#include <stdio.h>
int main()
{
int x = 10;
printf("x = %d\n",x); //check x value equals 10
for(int i = 0; i < 10; i ++)
{
int x = i;
printf("x = %d\n",x); //a new variable, also called x, now outputs x = i;
}
printf("x = %d\n",x); //check x value returns to the original when scope is left
return 0;
}
推荐阅读
- ruby-on-rails - 登录前如何回到页面原点
- python - Python gspread range 格式为“A2:A”,A1 表示法
- android - 在 react-native 中从 TypeScript 调用本机函数
- java - 由于 Lombok 导致编译失败
- mysql - MySQL将默认值设置为其他表中的其他列
- flutter - 如何在不颤动的情况下从一个屏幕导航到另一个屏幕?
- javascript - 如何将移动地理位置标记添加到自动更新位置的 Folium 网络地图中?
- python-3.x - 修复从 PIL 图像到 OpenCV Mat 的低效图像转换
- django - django related_name 如何与特殊关键字 / 一起使用
- hotkeys - wshShell.SendKeys(Chr(&hAF)) 不起作用