为什么在C语言中二维数组第二维下标可以越界?
例如:voidmain(){inta[3][3]={1,2,3,4,5,6,7,8,9};printf("%d",a[0][3]);}...
例如:void main()
{
int a[3][3]={1,2,3,4,5,6,7,8,9};
printf("%d ",a[0][3]);
} 展开
{
int a[3][3]={1,2,3,4,5,6,7,8,9};
printf("%d ",a[0][3]);
} 展开
5个回答
展开全部
假设这个数组是连续内存的话,第二个下标越界第一个不越界,那这个地址还是有可能落在这个二维数组的内存范围内的,但是你第一维最后元素的第二维下标越界试试? 那就跑出这个数组的内存范围了,谁这么明确告诉你可以越界了?
int a[5][5];
a[5][6]=0;
这么写或许编译不报错,但是你修改了莫名其妙地址上的数据,要么崩溃要么出错...这样是不可取的
int a[5][5];
a[5][6]=0;
这么写或许编译不报错,但是你修改了莫名其妙地址上的数据,要么崩溃要么出错...这样是不可取的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
越界是肯定的,但是越界不代表程序会出错,你这个地方越界后访问的正好是下一个元素4,是一个有效值,所以不会出错。可以试试访问a[3][3],这个时候不一定会访问到什么东西,这时就很容易出现内存破坏,会提示内存不可访问之类的吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为数组是连续存储的,所以a[0][3]就是第四个存储的数据,你可以试试a[0][4]..
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
相当于一维数组的第四个元素
哥们,往大了试,a[0][9]你试试
哥们,往大了试,a[0][9]你试试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询