数组越界但没有错误?

时间:2015-07-03 20:59:52

标签: c arrays

所以我学习C,我有Java和Python的经验,这是一件非常好奇的事情。

当我运行此代码时,输​​出为Hello7

#include <stdio.h>

int main()
{
    int a[1];
    a[1]=1;
    a[2]=2;
    a[3]=7;
    printf("Hello%d",a[3]);
}

但是如果数组的最大大小为1,GCC如何能够打印出Hello7?

1 个答案:

答案 0 :(得分:2)

C数组只不过是一系列连续的内存位置。当你要求C从数组中提供某个索引时,它会占用数组的开头并添加必要的字节数以获得适当的内存位置。它不知道数组应该有多大;在C中,作为程序员留给你的工作。