c语言的一个问题

若有声明语句inta[10],b[3][3];则以下对数组元素的赋值操作中,不会出现越界访问的是:A.a[-1]=0;B.a[10]=0;C.b[3][0]=0;D.b[... 若有声明语句int a[10],b[3][3];则以下对数组元素的赋值操作中,不会出现越界访问的是:A.a[-1]=0;B.a[10]=0;C.b[3][0]=0;D.b[0][3]=0谁能解释一下答案为什么选B,我怎么觉得四个都是错的。
打错了,答案是选的D
展开
 我来答
kingfeng588
2012-07-02 · TA获得超过2494个赞
知道大有可为答主
回答量:1475
采纳率:50%
帮助的人:1806万
展开全部
b[0][3]=b[1][0]
二维数组分配内存连续分配,
比如:
b[0][0] b[0][1] b[0][2] b[1][0] b[1][1] b[1][2] b[2][0] b[2][1] b[2][2]
b分配了 9个连续的地址,
b[0][3]也就是指的是, b[0][2]的下一个地址,那就是b[1][0],所以没有越界访问。
b[3][0]就是b[2][2]的下一个地址,所以越界了。
风若远去何人留
推荐于2017-11-27 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450126
专业C/C++软件开发

向TA提问 私信TA
展开全部
ABC都是很明显的越界.
D
b[0][3] 看起来是行越界了. 但由于是二维数组.
所以 实际访问的是b[1][0] . 所以这个可以不算越界.
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tseug8271
2012-07-02 · TA获得超过1498个赞
知道小有建树答主
回答量:745
采纳率:100%
帮助的人:364万
展开全部
int a[10] 下标 0-9
b[3][3] 下标,0-2, 0-2

b[0][3] 这样看 0*3+3 = 1*3+0,相当于 b[1][0],不越界,但这是一种不好的习惯
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式