Форум программистов, компьютерный форум CyberForum.ru

Как сдвинуть указатель на несколько байт? - C++

Восстановить пароль Регистрация
 
TheSameQuest
3 / 3 / 0
Регистрация: 06.04.2009
Сообщений: 36
10.06.2012, 18:29     Как сдвинуть указатель на несколько байт? #1
Сейчас разбираю пример из книжки и столкнулся со следующей проблемой.
Компилирую в Visual Studio 2005.

Переменная curr обьявленна как:
C++
1
_SYSTEM_PROCESSES *curr = (_SYSTEM_PROCESSES*)SystemInformation;
Тоесть она содержит указатель на массив структур _SYSTEM_PROCESSES.

Далее мне нужно сдвинуть указатель который хранится в ней на несколько байт, в
кинжке написанно так:
C++
1
(char*)curr+=curr->NextEntryDelta;
Компилятор выдаёт на этой строке ошибку:
error C2106: '+=' : left operand must be l-value

Что делать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alexey31415
 Аватар для alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
10.06.2012, 18:36     Как сдвинуть указатель на несколько байт? #2
Может стоит попробовать перегрузить оператор =
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
10.06.2012, 18:44     Как сдвинуть указатель на несколько байт? #3
Уберите каст к char*
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
10.06.2012, 18:51     Как сдвинуть указатель на несколько байт? #4
Цитата Сообщение от soon Посмотреть сообщение
Уберите каст к char*
Тут суть в том, что delta измеряется в байтах, а не в (sizeof _SYSTEM_PROCESSES)'ах.
Вообще можно непосредственно:
C++
1
curr = (_SYSTEM_PROCESSES*)((char*)curr + curr->NextEntryDelta);
Не знаю, может быть, можно и лучше как-то...
TheSameQuest
3 / 3 / 0
Регистрация: 06.04.2009
Сообщений: 36
10.06.2012, 21:07  [ТС]     Как сдвинуть указатель на несколько байт? #5
Цитата Сообщение от Somebody Посмотреть сообщение
Тут суть в том, что delta измеряется в байтах, а не в (sizeof _SYSTEM_PROCESSES)'ах.
Вообще можно непосредственно:
C++
1
curr = (_SYSTEM_PROCESSES*)((char*)curr + curr->NextEntryDelta);
Не знаю, может быть, можно и лучше как-то...
Спасибо! Помогло.
Yandex
Объявления
10.06.2012, 21:07     Как сдвинуть указатель на несколько байт?
Ответ Создать тему
Опции темы

Текущее время: 08:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru