Вычитание адресов памяти в массиве, но это дает мне фактическое число - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь вычесть два адреса памяти из двух элементов в массиве, называемых числами, и у меня есть это:

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

Результат, который он мне дает: 50. Это дает мне фактическийчисло, а не адрес памяти.

Я также пытался назначить указатели для обоих чисел [50] и чисел [0], а затем вычесть указатели, и это дает точно такой же результат: 50.

Мне нужны реальные адреса памяти.Кто-нибудь может подтолкнуть меня в правильном направлении?

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Это не то, что вычитание.

Вычитание - это когда у вас есть вещь B, и вы удаляете количество вещи A.

Если ваш 51-й элемент index[50] находится в 0x110, тогда &index[50] равно 0x110.

Если ваш первый элемент index[0] соответствует 0x010, то &index[0] равен 0x010.

Мы учились в школечто 0x110 - 0x010 есть 0x100.Но, хотя я пишу все здесь в base-16 (hex), это не адрес памяти.Это числовая разница между двумя значениями.Это расстояние между ними.

Если вы просто хотели узнать адрес 51-го элемента, ну, вот с чего вы начали: это &index[50].Так что просто напишите это.

0 голосов
/ 18 февраля 2019

Результат, который он мне дает: 50. Он дает мне реальный номер, а не адрес памяти.

Вот что приводит к вычитанию двух адресов памяти: Расстояние между нимиадреса (с единицей измерения размером элемента).Неясно, какой адрес памяти вы могли бы ожидать получить, но вычитать адреса не для того, чтобы получить адрес памяти.

Я должен получить адрес памяти для элементас индексом 50, верно?

Нет.Вы получаете адрес памяти для элемента с индексом 50 следующим образом: &nums[50] (или nums + 50).Это то, что вы используете в качестве левого операнда вашего вычитания.Единственный способ получить то же самое, что и результат вычитания, это если правый операнд равен нулю.Вычитание целого числа из адреса приводит к получению другого адреса (или, в случае нуля, того же адреса).

...