我寫下面的代碼在C:Ç怪異有趣的節目輸出
#include <stdio.h>
#include <stdlib.h>
#define LEN 100
int main(void)
{
int arr[LEN];
int i;
for (i = 0; i < LEN; i++)
printf("%d ", arr[LEN]);
getchar();
return 0;
}
首先,請注意,我故意存取存儲器,其不是陣列的一部分(最後單元將在指數LEN-1
,我訪問arr[LEN]
,不arr[i]
。
怪異的結果是,當我運行程序時,它打印所有0的號碼...... LEN-1。 對於〔實施例,當LEN定義像這裏100,輸出是:
0 1 2 ..... 99
請運行該程序。它也發生在你身上嗎?我認爲這是平臺依賴的行爲。 (如果相關,我在Windows 7上運行此代碼。)
爲什麼arr [LEN]的值會改變?
未定義的行爲是未定義的行爲。在這種特殊情況下,它看起來好像禁用了優化,而'i'正好位於'arr'結尾後的下一個地址,但通常情況下*會發生任何事情(惡魔,鼻子等),它不會不會感到驚訝。 –
第一個初始化數組,第二個'arr [LEN]'是未定義的行爲,它應該是'arr [i]' –
@PaulR哦,現在我明白了。謝謝,這顯然是答案。 – Programmer