int a[2]={1210,15};
printf("%d",a[33] );
出力
1073828132
a[33]
配列要素が存在しないのに、印刷しようとしているときにエラーがスローされないのはなぜですか
int a[2]={1210,15};
printf("%d",a[33] );
出力
1073828132
a[33]
配列要素が存在しないのに、印刷しようとしているときにエラーがスローされないのはなぜですか
C は境界チェックを行わないためです。
コール スタック内の任意の場所を読み取るだけです。
C の配列は、ポインタの周りの一種の構文糖衣です。
int a[2]
2 つの int の配列用のスペースを作成し、初期化します。
しかしa[33]
、実際*(a + 33)
には、 の最初の要素を指すa
だけです。配列を逆参照するとき、C は配列が初期化されたサイズを気にしません。int *
a