该循环如何结束,结果是否确定?
|
我找到了一些代码,并且对循环如何退出以及如何工作感到困惑。程序是否产生确定性输出?
我感到困惑的原因是:
1. `someArray` is of size 2, but clearly, the loop goes till size 3,
2. The value is deterministic and it always exits `someNumber` reaches 4
有人可以解释一下这是怎么回事吗?
当我在include \的库名称周围放置尖括号<>
时,代码无法正确打印。
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
int main() {
int someNumber = 97;
int someArray[2] = {0,1};
int findTheValue;
for (findTheValue=0; (someNumber -= someArray[findTheValue]) >0; findTheValue++) {
}
printf(\"The crazy value is %d\", findTheValue);
return EXIT_SUCCESS;
}
没有找到相关结果
已邀请:
4 个回复
缝皋
泉秘胁
是指向
的指针! 由于这些变量是一个接一个地声明的,因此很有可能将它们连续放置在内存中(我相信是在堆栈上)。 C并没有真正进行任何内存管理或错误检查,因此
表示内存在
。 因此,当
为0时,我们减去,然后当
为1时,我们减去1。当
为2时,我们减去
(现在为94)并退出。 这种行为绝不能得到保证。不要依赖它! 编辑:很可能someArray [2]指向RAM中的垃圾(未指定)值。这些值可能大于93,并将导致循环退出。 EDIT2:或者
和
是大的负数,并且两者相减会导致someNumber翻转为负数。
拭十年
正在打印出findTheValue,someNumber,someArray [findTheValue] 乍一看,这不是我期望的答案。
踩什不
给这个输出:
似乎出于某种原因,编译器将数组放在堆栈区的开始,然后放在下面声明的变量,然后放在声明顺序在上面的变量。因此someArray [3]有效地指向someNumber。 我真的不知道原因,但是我在带有和不带有优化的Ubuntu 32位和Visual Studio上尝试了gcc,结果总是相似的。