繁体   English   中英

integer 数组中的索引增量

[英]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 循环是无限进行的。

原因是您的循环变量i0变为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM