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]存在しません -の 5 番目ではなく6 番目の要素になりkます。C の配列は、インデックスがゼロです。つまり、、、 、、および というk要素があり、それだけです。k[0]k[1]k[2]k[3]k[4]

未定義の動作を引き起こしたので、何かが起こる可能性があります。

于 2013-02-07T17:54:39.957 に答える
2

C の配列のインデックスは "0" です。これは、k の最初の要素が k[0]、2 番目の要素が k[1]、k の 5 番目の要素が k[4] であることを意味します。

i = 0 から i = 4 (つまり、「i < 5」) に進む for ループでこれを適切に処理します。

k[5] は、配列の直後にあるメモリ領域が現在 0 に設定されているため、0 として出力されます。任意の値に設定できます。完全に任意です。k[5] を見ると、配列に割り当てられた領域の外を見ていることになり、見るべきではないメモリの一部を見ていることになります。マネージ プログラミング言語では、絶対にすべきではないことを行っているため、そのコード行は例外をスローします。

于 2013-02-07T17:59:05.323 に答える