我对这段代码的问题是,当我调试它时,k数组中第5个元素的值被实例化为值0.任何人都可以解释为什么会发生这种情况?如果你也可以调试它会很好!
#include <stdio.h>
#include <stdlib.h>
main ()
{
int k[5]={3,1,7,2,6};
float d=0;
int t =3;
int i;
for (i=0;i<5;i++)
{
if (k[5]>t)
d+=k[i];
else
d++;
}
d/=2;
printf("%f\n",d);
system("pause");
}
答案 0 :(得分:7)
k[5]
不存在 - 它将是k
的第6个元素,而不是第5个元素。 C中的数组是零索引的。这意味着k
包含元素k[0]
,k[1]
,k[2]
,k[3]
和k[4]
,就是这样。
你导致了未定义的行为,所以任何事情都可能发生。
答案 1 :(得分:2)
C中的数组是“0”索引。这意味着k的第一个元素是k [0],第二个元素是k [1],一直到k的第五个元素是k [4]。
你在for循环中正确行事,你从i = 0到i = 4(即“i <5”)。
k [5]出现为0,因为它恰好位于数组之后的内存区域当前设置为0.它可以设置为任何值 - 它完全是任意的。 通过查看k [5],您正在查看分配给阵列的区域之外,并且正在查看您不应该查看的内存部分。在托管编程语言中,那行代码会引发异常,因为你正在做一些绝对不应该做的事情。