数组中的整数索引增量

时间:2011-06-13 09:02:29

标签: c arrays loops for-loop integer

我对以下代码段有一个疑问。实际上我在下面的代码中将所有数组索引初始化为零,但是这个for循环是无限的。我发现我们正在尝试访问数组的第26个索引,因此该值会再次初始化为零,因为有0到25个索引。所以for循环是无限的。解释一下这个东西背后的实际原因。

int array[26];
int i; 
for (i = 0; i <= 26; i++) 
    array[i]= 0;

3 个答案:

答案 0 :(得分:10)

你必须使用i < 26;否则你超过数组范围。

由于大多数系统上的堆栈布局array[26]将指向用于i的内存,这会导致循环再次启动,因为循环体将i设置为0而不是适当的数组元素。

请注意,您只需使用int array[36] = { 0 };创建数组,并将所有元素设置为0。

答案 1 :(得分:1)

可能i位于内存中的array之后,并且在循环中0时变为i=26。即&array[26] == &i

答案 2 :(得分:0)

  

我发现我们正在尝试访问数组的第26个索引,因此该值再次初始化为零,因为有0到25个索引。所以for循环是无限的。

原因是您的循环变量i0变为26 包含。但是array[26]只有array[0]array[25](共有26个元素)。

您正在通过写入array[26]来调用未定义的行为;在你的执行运行中恰好发生了i在内存array之后布局,并且你不小心将0写入i由于错误的写。这可能导致无限循环。

而是写:

int array[26];
int i;
for (i = 0; i < 26; i++) {
   array[i] = 0; 
}