减去数组中的内存地址,但这给了我实际的数字

时间:2019-02-18 02:28:32

标签: c++ memory-address subtraction pointer-arithmetic

我试图减去数组中两个元素的两个内存地址,称为nums,我有这个意思:

cout << Subtracted memory addresses: << (&nums[50]) - (&nums[0]);

它给我的结果是:50。它给我的是实际数字而不是内存地址。

我还尝试将指针分配给nums [50]和nums [0],然后减去指针,结果完全相同:50。

我需要实际的内存地址。谁能向正确的方向推动我?

2 个答案:

答案 0 :(得分:3)

  

它给我的结果是:50。它给我的是实际数字而不是内存地址。

这就是减去两个内存地址的结果:这些地址之间的距离(单位为元素的大小)。尚不清楚您可能希望获得的 内存地址,但是减去地址并不是获得内存地址的一种方式。

  

我应该获取索引为50的元素的内存地址,对吗?

不。您将获得索引为50的元素的内存地址,如下所示:nums + 50(或{{1}})。这就是您用作减法的左操作数的方式。要获得与减法结果相同的唯一方法是,如果右操作数为零。从一个地址中减去一个整数确实会导致另一个地址(或在零的情况下是相同的地址)。

答案 1 :(得分:0)

那不是减法。

减法是指您拥有东西B,并且您除去了东西A的数量。

如果您的第51个元素index[50]位于0x110,则&index[50]0x110

如果您的第一个元素index[0]位于0x010,则&index[0]0x010

我们在学校得知0x110 - 0x0100x100。但是,即使我在此处以base-16(十六进制)编写所有内容,这也不是内存地址。那是两个值之间的数值差异。这是它们之间的距离。

如果您只是想知道第51个元素的地址,那就是您开始的地方:&index[50]。所以就写吧。