为什么k [5]元素的值被实例化为0?

时间:2013-02-07 17:53:51

标签: c

我对这段代码的问题是,当我调试它时,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");
}

2 个答案:

答案 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],您正在查看分配给阵列的区域之外,并且正在查看您不应该查看的内存部分。在托管编程语言中,那行代码会引发异常,因为你正在做一些绝对不应该做的事情。