1

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

2 回答 2

7

k[5]不存在 - 这将是 的第 6 个元素k,而不是第 5 个。C 中的数组是零索引的。这意味着k有元素k[0], k[1], k[2], k[3], and k[4], 就是这样。

你造成了未定义的行为,所以任何事情都可能发生。

于 2013-02-07T17:54:39.957 回答
2

C 中的数组以“0”为索引。这意味着 k 的第一个元素是 k[0],第二个元素是 k[1],一直到 k 的第五个元素是 k[4]。

你在你的for循环中正确地处理这个,你从i = 0到i = 4(即“i < 5”)。

k[5] 显示为 0,因为恰好在您的数组之后的内存区域当前设置为 0。它可以设置为任何值 - 这完全是任意的。通过查看 k[5],您正在查看分配给数组的区域之外,并且正在查看您不应该查看的内存部分。在托管编程语言中,这行代码会引发异常,因为您正在做一些绝对不应该做的事情。

于 2013-02-07T17:59:05.323 回答