我试图减去数组中两个元素的两个内存地址,称为nums,我有这个意思:
cout << Subtracted memory addresses: << (&nums[50]) - (&nums[0]);
它给我的结果是:50。它给我的是实际数字而不是内存地址。
我还尝试将指针分配给nums [50]和nums [0],然后减去指针,结果完全相同:50。
我需要实际的内存地址。谁能向正确的方向推动我?
答案 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 - 0x010
是0x100
。但是,即使我在此处以base-16(十六进制)编写所有内容,这也不是内存地址。那是两个值之间的数值差异。这是它们之间的距离。
如果您只是想知道第51个元素的地址,那就是您开始的地方:&index[50]
。所以就写吧。