我用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]的值会改变?
arr[LEN]
是未定义的行为,应该是arr[i]
。 - Grijesh Chauhani
。因此,&arr[LEN](即 arr[100])可能恰好是i
的地址。 - Arnaud Denoyelle