c - C 中 for 循环导致无限循环的示例
问题描述
以下程序被引用为进入无限循环:
#include<stdio.h>
int main()
{
int n;
for(n = 7; n!=0; n--)
printf("n = %d", n--);
getchar();
return 0;
}
在分析中,我确实发现在某一时刻 n 的值确实变为 0,然后循环应该终止。不会发生这样的情况,当它第一次进入循环时,值为 7,然后变为 6,因为每次迭代有 2 个后递减?但是,为什么没有发生呢?
解决方案
每次循环迭代实际上减少n
了 2,并且比较n != 0
总是看到一个奇数值i
,因此永远不会终止。
特别是,就在所讨论的迭代之前,首先n--
在循环头中将 n 减为 1(因为这必须发生在上一次迭代结束之后,就在条件评估之前n!=0
)。
然后,printf("n = %d", n--);
被评估,打印n = 1
,同时递减到n
零。在循环体结束后,nn--
在循环头中再次递减,使其变为 -1,就在n!=0
评估条件以确定循环是否应该继续之前。
结果,n!=0
每次评估时都为真(特别是,在 n 为零的那一刻不评估它,因为n--
循环头必须首先完成)
推荐阅读
- c++ - 动态分配的二维数组中使用的用户定义类型
- python - Numpy:在两个不同长度的数组上成对应用函数
- python - 如何解决 CMake 错误:找不到“boost_python3”提供的包配置文件
- java - 在 Hazelcast jet 中,我们如何将 IList 存储到普通列表中,因为我必须在响应中发送它?
- c# - 连接到 HPC 调度程序时如何以编程方式设置用户密码凭据
- android - 在 Surface TextureView 上叠加动态 FPS
- regex - 为具有两个给定姓氏的人过滤 Airtable 数据库
- java - 我是否需要在同一台服务器上加密 Front 和 Back 之间的数据和连接?
- reactjs - 单选网格
- php - Twitter Premium API - webhook 没有收到活动