【发布时间】:2017-11-22 01:58:55
【问题描述】:
我有一个问题要我找出两个数组元素地址之间的字节偏移量:
double myArray[5][7];如果 C 以列优先顺序存储数据,则
&myArray[3][2]与&myArray[0][0]的偏移量(以字节为单位)将为:
按照列的主要顺序,我认为元素会这样排列:
[0][0] -- [1][0] -- [2][0] -- [3][0] -- ..... -- [3][2]
因此,在我看来,以字节为单位的偏移量是计算 [0][0] 和 [3][2] 之间的跳转次数并将其乘以 8,因为它是一个双精度数组。然而,令我困惑的是,它使用 & 运算符要求偏移量。这会以某种方式改变答案,因为它在两个地址之间询问还是过程仍然相同?我认为它会是一样的,但我不是 100% 确定。
如果我的想法是正确的,这会是 8*15 字节吗?
【问题讨论】:
-
没有 & 那些表达式将产生 值 而不是地址。
-
正确,但是找到两个内存位置之间的偏移量会改变过程吗?我想我要说的是这个问题的框架让我感到困惑,我是否做得正确。
-
找到 3.14 和 2.78 之间的偏移量是没有意义的。 “偏移”只对内存地址有意义。
-
好吧,我假设有可能将问题定义为“元素 [3][2] 和 [0][0] 之间的偏移量”,也许可以假设地址部分。无论如何,您是在告诉我我的方法是正确的方法吗?
-
我认为该问题的作者只是想以更像 C 的方式提出问题。您应该可以通过以下方式进行测试:
printf("%d\n", (char*)&myArray[3][2] - (char*)&myArray[0][0]);