-2
   int a[2]={1210,15};

    printf("%d",a[33] );

出力

1073828132

a[33]配列要素が存在しないのに、印刷しようとしているときにエラーがスローされないのはなぜですか

4

2 に答える 2

6

C は境界チェックを行わないためです。

コール スタック内の任意の場所を読み取るだけです。

于 2012-05-03T11:50:54.703 に答える
2

C の配列は、ポインタの周りの一種の構文糖衣です。

int a[2]2 つの int の配列用のスペースを作成し、初期化します。

しかしa[33]、実際*(a + 33)には、 の最初の要素を指すaだけです。配列を逆参照するとき、C は配列が初期化されたサイズを気にしません。int *a

于 2012-05-03T11:56:22.190 に答える