不是能越界,C中数组时从0开始算起的。你是a[3][3],想要显示对应元素时,就应做相应变换,例如显示第2行第3列元素(即6),就要写printf("%d ",a[1][2]);,你写a[0][3]按照3维数组来说,没有这个元素,这时C语言内的编译器就自动把这个三维数组默认成一个一维数组,他显示的是这个以为数组的第4个数,即4
假设这个数组是连续内存的话,第二个下标越界第一个不越界,那这个地址还是有可能落在这个二维数组的内存范围内的,但是你第一维最后元素的第二维下标越界试试? 那就跑出这个数组的内存范围了,谁这么明确告诉你可以越界了?
int a[5][5];
a[5][6]=0;
这么写或许编译不报错,但是你修改了莫名其妙地址上的数据,要么崩溃要么出错...这样是不可取的
越界是肯定的,但是越界不代表程序会出错,你这个地方越界后访问的正好是下一个元素4,是一个有效值,所以不会出错。可以试试访问a[3][3],这个时候不一定会访问到什么东西,这时就很容易出现内存破坏,会提示内存不可访问之类的吧
因为数组是连续存储的,所以a[0][3]就是第四个存储的数据,你可以试试a[0][4]..
相当于一维数组的第四个元素
哥们,往大了试,a[0][9]你试试