为什么在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]);

}
展开
 我来答
lxj20072007
2010-10-08
知道答主
回答量:7
采纳率:0%
帮助的人:0
展开全部
不是能越界,C中数组时从0开始算起的。你是a[3][3],想要显示对应元素时,就应做相应变换,例如显示第2行第3列元素(即6),就要写printf("%d ",a[1][2]);,你写a[0][3]按照3维数组来说,没有这个元素,这时C语言内的编译器就自动把这个三维数组默认成一个一维数组,他显示的是这个以为数组的第4个数,即4
百度网友d2d7c8d
2015-10-21 · TA获得超过528个赞
知道小有建树答主
回答量:109
采纳率:50%
帮助的人:50.7万
展开全部
假设这个数组是连续内存的话,第二个下标越界第一个不越界,那这个地址还是有可能落在这个二维数组的内存范围内的,但是你第一维最后元素的第二维下标越界试试? 那就跑出这个数组的内存范围了,谁这么明确告诉你可以越界了?
int a[5][5];
a[5][6]=0;
这么写或许编译不报错,但是你修改了莫名其妙地址上的数据,要么崩溃要么出错...这样是不可取的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ade1986
2010-10-08 · TA获得超过107个赞
知道答主
回答量:133
采纳率:0%
帮助的人:62.4万
展开全部
越界是肯定的,但是越界不代表程序会出错,你这个地方越界后访问的正好是下一个元素4,是一个有效值,所以不会出错。可以试试访问a[3][3],这个时候不一定会访问到什么东西,这时就很容易出现内存破坏,会提示内存不可访问之类的吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
luffylli
推荐于2018-03-23 · TA获得超过766个赞
知道小有建树答主
回答量:328
采纳率:0%
帮助的人:319万
展开全部
因为数组是连续存储的,所以a[0][3]就是第四个存储的数据,你可以试试a[0][4]..
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友266bb49
2010-10-08 · TA获得超过136个赞
知道答主
回答量:122
采纳率:0%
帮助的人:80.5万
展开全部
相当于一维数组的第四个元素
哥们,往大了试,a[0][9]你试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式