幼儿园中班教材分析:c语言2维数组的问题

来源:百度文库 编辑:神马品牌网 时间:2024/05/10 19:40:32
昨天看到这样一段程序

int a[2][5]={1,0,2,5,6,8,9,7,4,3};
如果元素等于2则与下一个元素交换位置!
也就是2和5的位置交换!
for(i=0;i<2;i++)
for(j=0;j<5;j++)
{
if(a[i][j]==2)
{
k=a[i][j];a[i][j]=a[i][j+1];a[i][j+1]=k;
}
}

我的问题是如果2的位置是在a[0][4]或是a[1][4]
该程序执行会不会越界!! 最好能解释下为什么!
谢谢

数组在内存中分配的是连续存储单元,二维数组a[2][5]相当于一维数组a[10],a[0][4]相当于a[4],而a[1][4]相当于a[9],所以a[1][4]的下一个别a[1][5]相当于a[10],而a[10]是越界的。所以,a[0][4]不会越界,a[1][4]会!

a[1][4]会越界,它是数组定义的最后一个单位,对于a[1][4+1]是未定义的空间。运行会报错。 但是,a[0][4]不会,它的下一个地址是a[1][0]。