c语言二维数组下标负数是什么意思~? 5

如staticinta[3][4]={{1,2,3},{4,5,6}},i;i=a[2][-2]+a[1][3];a[2][-2]是什么意思?还有~这个是大学c语言考试题... 如 static int a[3][4]={{1,2,3},{4,5,6}}, i;
i= a[2][-2] + a[1][3];
a[2][-2]是什么意思?
还有~这个是大学c语言考试题~放入tc中运行会输出i=6~~
展开
 我来答
一口没水的枯井
推荐于2017-10-11 · TA获得超过2989个赞
知道小有建树答主
回答量:473
采纳率:100%
帮助的人:148万
展开全部
1 在C语言中,二维数组的下标可以为负数,表示指向前面的元素
2 对于二维数组 int arr[M][N]来说,arr[i][j]的地唤凳拿址是 (*arr)+i*N+j,其值是*((*arr)+i*N+j)
3 分析本题

数组粗陪a在初始化时后,其元素按照在内存中的排列顺序依次为1,2,3,0, 4,5,6,0, 0,0,0,0
数组a的第一个元素的地址为*a(或&a[0][0]或a[0]),记为p,
则,a[2][-2]的地址就是 p+2*4+(-2) 即p+6,即指向第7个元素,其值为6;
同理,a[1][3]的地址为p+1*4+3,即p+7,即指向第8个元素,其值为0
所以和搭i的值为6
窗前过马
2012-03-14 · 超过27用户采纳过TA的回答
知道答主
回答量:76
采纳率:0%
帮助的人:48万
展开全部
在这里这不是一个错误,但是一般不会写这样的程序。
首先应该理解语言中数组的存弊雹储结构。对二维数组,在内存中实际是按行存储的,也就是说二维数组中元素是按行依次存储在一片连续的的空间中。

取某个元素时,是先通过计算这个元素的地址,再通过计算得来的地址取得该元素的。依然以二维数组为例,设数组a[rows][cols](即有rows行,cols列),当访问a[i][j]的时候,是先通过i,j的值计算得到要取的元素的地址,再在这个地址上取得租拆帆该值的。计算地址的方法是: a + i*cols + j, 这里a就是数组名,它实际存放着上是这个数组的每一个元素的地址。

因此,对御裤于您的问题, 可能计算得到a[2][-2]的元素地址为 a+2*4 + (-2) = a + 6 = a + 1*4 + 2
它的地址与元素a[1][2]的地址一样,也就是说a[2][-2]与a[1][2]实际上是同一个元素。因此输出6,这是正常的现象。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dairuomuniao
2007-11-06 · 超过26用户采纳过TA的回答
知道答主
回答量:73
采纳率:0%
帮助的人:81.4万
展开全部
我想那是一个错误,这是明显的数组越界~ 学这么长时间c语言,我从来就没有见过~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
123553628
2007-11-07 · TA获得超过6483个赞
知道小有建树答主
回答量:621
采纳率:0%
帮助的人:515万
展开全部
着纤派启毁如因该是 错误的``````

数组的下标是从0开始的`````
不可能有 -2;

有什么不羡卖懂 你可以给我短信```

参考资料: 选的的答案好吧````

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
5舍213
2007-11-06 · TA获得超过109个赞
知道答主
回答量:59
采纳率:0%
帮助的人:50.9万
展开全部
确实很奇怪,应该是错的.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式