Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 23.05.2017
Сообщений: 6
1

Арифметические операции с указателями второго порядка

08.02.2019, 18:50. Показов 1545. Ответов 2
Метки нет (Все метки)

Всем доброго времени суток.

Есть собственно псевдокод:
C++
1
2
3
4
(void*)(*(DWORD_PTR*)(reinterpret_cast<void*>(object))); // 00000276B9893AB8
(void*)(*(DWORD_PTR*)(reinterpret_cast<void*>(object)) + 0x150); // 00000276B9893C08
(void*)(*(DWORD_PTR**)(reinterpret_cast<void**>(object))); // 00000276B9893AB8
(void*)(*(DWORD_PTR**)(reinterpret_cast<void**>(object)) + 0x150); // 00000276B9894538
Вопрос: почему во второй строке к числу 00000276B9893AB8 действительно прибавляется 0x150, а в четвёртой 0x150 * 8?
Хотя по сути в четвёртой строке должно получиться то же число, что и во второй строке. Объясните пожалуйста

Заранее спасибо!
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.02.2019, 18:50
Ответы с готовыми решениями:

Арифметические операции с указателями
Имеется следующий простой код: #include &lt;iostream&gt; using namespace std; int main() { int *...

арифметические действия с указателями не работают
На одном сайте (http://www.c-cpp.ru/books/arifmeticheskie-deystviya-s-ukazatelyami) написано, что с...

Операции с указателями в С++
Используя приведенный ниже код разработать программу, используя в качестве контейнера для хранения...

Операции с указателями
Собственно вопрос : есть функция void vyvod(char* prov) { printf(&quot;%s&quot;, prov); } и есть...

2
Мозгоправ
1730 / 1024 / 468
Регистрация: 01.10.2018
Сообщений: 2,137
Записей в блоге: 2
08.02.2019, 19:24 2
Лучший ответ Сообщение было отмечено MadVlad1715 как решение

Решение

Видимо потому, что void* - это просто адрес в памяти, а void** - это указатель на адрес в памяти. В первом случае (вторая строка) вы сдвигаетесь от адреса object на 0x150 байт, а во втором случае (четвёртая строка) - сдвигаетесь на 0x150 указателей размещённых в памяти, начиная с адреса object. Размер указателя для х64 8 байт.
1
0 / 0 / 0
Регистрация: 23.05.2017
Сообщений: 6
08.02.2019, 19:40  [ТС] 3
Да, спасибо Вам большое за ответ, правда я уже и сам догадался

Как вариант - перед прибавлением можно использовать приведение типа не к указателю, а к обычному типу, а после обратно в указатель.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.02.2019, 19:40

Операции с указателями
Задание.Создать указатель *ptr на целочисленную переменную и присвоить число 100. Скопировать...

Операции над указателями
int var = 123; int *p = &amp;var; (*p)++ и ++*p это одно и тоже. В первом случае приоритет задал...

Быстрые арифметические операции
Здравствуйте. Я знаю, что в си++ есть понятие быстрых арифметических операций (не могу вспомнить...

Арифметические операции. Дополнительный код
суть проблеммы в следующем. лаба. Операции с числами в доп. коде (доп. код - то каким способом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru