[英]integer index incrementation in array
我对以下片段有一个疑问。 实际上我在下面的代码中将所有数组索引初始化为零,但是这个for
循环是无限的。 我找到了我们试图访问数组的第 26 个索引的原因,因此该值再次初始化为零,因为有 0 到 25 个索引。 所以 for 循环是无限进行的。 解释一下这些东西背后的实际原因。
int array[26];
int i;
for (i = 0; i <= 26; i++)
array[i]= 0;
你必须使用i < 26
; 否则你会超出数组范围。
由于大多数系统array[26]
上的堆栈布局将指向用于i
的 memory ,这将导致循环再次开始,因为您循环体将 i 设置为 0 而不是适当的数组元素。
请注意,您可以简单地使用int array[36] = { 0 };
创建所有元素都设置为 0 的数组。
也许i
位于 memory 中的array
之后,并且在循环中i=26
时变为0
。 即&array[26] == &i
。
我找到了我们试图访问数组的第 26 个索引的原因,因此该值再次初始化为零,因为有 0 到 25 个索引。 所以 for 循环是无限进行的。
原因是您的循环变量i
从0
变为26
(含)。 但是没有array[26]
..只有array[0]
到array[25]
(总共26个元素)。
您正在通过写入array[26]
来调用未定义的行为; 在您的执行运行中恰好发生了i
在 memory 中的array
之后布局的情况,并且由于错误写入,您不小心将0
写入i
。 这可能导致了无限循环。
而是写:
int array[26];
int i;
for (i = 0; i < 26; i++) {
array[i] = 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.