c语言数组中的相对位置

如果有一个二维数组a[2][3],其中a[1][2]对于起始位置a[0][0]的相对位移量是从a[0][0]开始计算(包括a[0][0])的呢,还是从a[0][1]开始计... 如果有一个二维数组a[2][3],其中a[1][2]对于起始位置a[0][0]的相对位移量是从a[0][0]开始计算(包括a[0][0])的呢,还是从a[0][1]开始计算(包括a[1][2])的呢虽然结果都是4,但是计算方式是不一样的 请顺便解释一下为什么
是5不是4我打错了
展开
 我来答
木子小三5f
2011-10-24 · TA获得超过3468个赞
知道小有建树答主
回答量:1299
采纳率:0%
帮助的人:1306万
展开全部
2行3列。
比如指针p指向 a[0][0];
那么p+1 指向a[0][1];
p+2 指向a[0][2];

p+3 指向a[1][0];
p+4 指向a[1][1];
p+5 指向a[1][2];
偏移自然是5。是从a[0][1]开始的,因为指针变量加了1,而且从话面上讲,a[0][0]对a[0][0]是没有偏移的,对不。

至于你对一楼的追问,那只是个计算公式。比如在某些语言里,数组下标是从1开始的,即首行首列元素为a[1][1],那么计算公式就变成了(i-1)N+(j-1) 了。 而偏移这个概念就是位置的改变,0到1的偏移才是1。
风若远去何人留
推荐于2017-10-26 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450095
专业C/C++软件开发

向TA提问 私信TA
展开全部
其实没必要纠结这个。 从1到9有几个数,是从1数到8,还是从2数到9,这个没多大意义的。
a[1][2]之前有 00 01 02 10 11 12这样排下来的。 所以 12的相对位移是5
如果一定要纠结算法, 应该是从00数到11
因为标准的程序算法是这样的
offset=(&a[1][2] - &a[0][0]);
中间部分存储的是00到11的数据。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-10-24
展开全部
a[2][3]表示有6个元素,6个元素的排序顺序如下,若每个元素占四个字节,则后一个元素的地址值是前一个元素的地址值加四。
a[0][0] a[0][1] a[0][2]
a[1][0] a[1][1] a[1][2]
追问
我说的是元素不字节
追答
a[1][2]对于起始位置a[0][0]的相对位移量是从a[0][0]开始计算,排第六,&a[1][2]=&a[0][0]+5*sizeof(a[0][0])。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Only釗
2011-10-24 · TA获得超过232个赞
知道小有建树答主
回答量:130
采纳率:0%
帮助的人:35.9万
展开全部
设数组为
0,0 0,1 0,2
1,0 1,1 1,2

那么在内存中该数组的地址分布为0,0 0,1 0,2 1,0 1,1 1,2
那么你看1,2 和 0,0中间有多少个空间~那么他们对于地址的偏移量就为多少
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tidecao2006
2011-10-24 · TA获得超过1228个赞
知道小有建树答主
回答量:842
采纳率:0%
帮助的人:776万
展开全部
a[0][0]相对于a[0][0]的偏移量为0,a[M][N]数组a[i][j]偏移量为i×N+j
追问
是说a[1][2]的相对位移是从a[0][1]开始计算的对吗?可是我看书上它是用一个矩阵来表示二维数组a[m][n](其中n指向列m指向行)a[i][j]对于起始位置的相对位移量计算公式i*n+j;他是这样解释的a[i][j]元素之前有i行元素(每行有n个),在a[i][j]的所在行还有j个元素,因此a[i][j]之前共有i*n+j个元素,可是如果这样理解那a[i][j]对于起始位置的相对位移量不是从a[0][0](把a[0][0]包括在内,而a[2][3]不计算在内吗我就是这不明白)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式