-6
下面的代碼具有固定大小2的陣列,這意味着它應該存儲最大3個元素a [0],A [1],A [2],但在給予進一步值編譯唐不顯示任何錯誤消息,並且值正確存儲。如何?C編程:陣列沒有任何約束
#include <stdio.h>
int main() {
int a[2];
a[0] = 1;
a[1] = 2;
a[2] = 3;
a[3] = 9;
a[4] = 99;
printf("%d\n", a[0]);
printf("%d\n", a[1]);
printf("%d\n", a[2]);
printf("%d\n", a[3]);
printf("%d\n", a[4]);
return 0;
}
輸出:-1 2 3 9 99
。
因爲C不需要邊界檢查。你看到的是未定義的行爲。 – 2016-03-05 20:17:24
另外'的INT A [2]'意味着它存儲**兩個項目**(正好兩個,而不是僅僅在最大),'一個[0]'和'一個[1]'。使用'a [2]'已經是未定義的行爲,因爲它位於數組之外。 – 2016-03-05 20:18:49
見[未定義的行爲(https://en.wikipedia.org/wiki/Undefined_behavior)。在幕後,你的程序正在做非常糟糕的事情。通常情況下,但並不總是會導致錯誤的輸出或崩潰。 – user3386109