【发布时间】:2020-11-09 21:21:25
【问题描述】:
如果 i=1,为什么下面的指令会创建一个无限的负数列表(-1、-3、-5、...)?
while (i--)
printf("\n%i", --i);
【问题讨论】:
-
技术上它不是无限的,它会一直持续到你通过
INT_MIN,然后有一些实现定义的行为。但是对于你的问题,为什么不呢。你希望它做什么? -
您应该提及您关注的重点是什么。它是对您认为应该是错误的 while 循环的真实评估,还是只是为什么它分两步打印负数。您会看到我们已经提供了答案,但并非所有人都专注于一件事。
-
@ThomasJager:C 标准说整数溢出的行为是未定义的,这意味着它不强加任何要求。这包括它不需要实现来定义行为这一事实,因此只有在实现选择定义行为时,行为才是实现定义的。
-
我认为 printf() 中的 -- 运算符只会更改 i 用于打印的值,而不是变量本身的值(这里是初学者)。知道这一切就清楚了。非常感谢大家的回答。 (如果我的英语不是完美的,我很抱歉,这不是我的母语)