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~~ 展开
i= a[2][-2] + a[1][3];
a[2][-2]是什么意思?
还有~这个是大学c语言考试题~放入tc中运行会输出i=6~~ 展开
展开全部
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
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
展开全部
在这里这不是一个错误,但是一般不会写这样的程序。
首先应该理解语言中数组的存弊雹储结构。对二维数组,在内存中实际是按行存储的,也就是说二维数组中元素是按行依次存储在一片连续的的空间中。
取某个元素时,是先通过计算这个元素的地址,再通过计算得来的地址取得该元素的。依然以二维数组为例,设数组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,这是正常的现象。
首先应该理解语言中数组的存弊雹储结构。对二维数组,在内存中实际是按行存储的,也就是说二维数组中元素是按行依次存储在一片连续的的空间中。
取某个元素时,是先通过计算这个元素的地址,再通过计算得来的地址取得该元素的。依然以二维数组为例,设数组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,这是正常的现象。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我想那是一个错误,这是明显的数组越界~ 学这么长时间c语言,我从来就没有见过~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
着纤派启毁如因该是 错误的``````
数组的下标是从0开始的`````
不可能有 -2;
有什么不羡卖懂 你可以给我短信```
数组的下标是从0开始的`````
不可能有 -2;
有什么不羡卖懂 你可以给我短信```
参考资料: 选的的答案好吧````
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
确实很奇怪,应该是错的.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询