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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
IvanPryamoy_2
0 / 0 / 0
Регистрация: 21.01.2013
Сообщений: 23
#1

Что это значит: *(void**)ReturnValue) = hHeap; ? - C++

21.01.2013, 17:00. Просмотров 416. Ответов 4
Метки нет (Все метки)

Вот честно, не могу понять что значит вторая строчка кода:

C++
1
2
void* ReturnValue = (void*) HeapAlloc((HANDLE) hHeap, HEAP_GENERATE_EXCEPTIONS | HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, count + sizeof(void*) );
*((void**)ReturnValue) = hHeap;
Если написать:
C++
1
*ReturnValue = hHeap;
, то появляется ошибка: "error C2100: недопустимое косвенное обращение". Так чем вышепревиденное извращение с преобразованием к двойному указателю, а потом обращение по нему лучше?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.01.2013, 17:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что это значит: *(void**)ReturnValue) = hHeap; ? (C++):

Что значит void(*f)()=(void(*)()func? - C++
void(*f)()=(void(*)())func; Объясните, пожалуйста, что значит этот код.

Что значит (void*)2)? - C++
Что значат ((void)*)? #define GLUT_STROKE_ROMAN ((void*)0) #define GLUT_STROKE_MONO_ROMAN ((void*)1) #define...

Что значит слово void - C++
изучаю функции,и наткнулся на: void DemonstrationFunction не могу понять,почему void,а не int.подскажите пожалуста Добавлено...

Что значит void в прототипе? - C++
BOOL WINAPI AllocConsole(void); BOOL - тип возвращаемого значения, WINAPIN - соглашение, AllocConsole - имя самой функции. А void здесь что...

что это значит? - C++
Помогите, пожалуйста, разобраться в данном фрагменте программы) char* rus(const char* text) {char *bufRus=new char; ...

что это значит? - C++
в задании есть такой фрагмент if(!(num%div)) что это означает?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Pure
228 / 49 / 2
Регистрация: 13.03.2012
Сообщений: 453
Записей в блоге: 7
21.01.2013, 17:09 #2
Изначально ReturnValue - просто указатель

*((void**)ReturnValue) = hHeap; - здесь он преобразован к указателю на указатель, далее разыменован и представляет из себя указатель.
То бишь ReturnValue.

Если обратится как ты пишешь *ReturnValue = hHeap, то будет ошибка доступа - ты разыменовываешь указатель на void и пытаешься "этому нечто" что то присвоить.


*((void**)ReturnValue) = hHeap; - эта запись и правда лишена смысла. она равна следующей

ReturnValue = hHeap;
0
IvanPryamoy_2
0 / 0 / 0
Регистрация: 21.01.2013
Сообщений: 23
21.01.2013, 17:36  [ТС] #3
Цитата Сообщение от Pure Посмотреть сообщение
*((void**)ReturnValue) = hHeap; - эта запись и правда лишена смысла. она равна следующей

ReturnValue = hHeap;
Нет, эти записи не равнозначны. В первом случае значение ReturnValue (адрес) не меняется, а во втором становится равным hHeap (проверено отладчиком). Другими словами в первом случае происходит присвоение значения по адресу ReturnValue, а во втором- присвоение указателя (теперь два указателя ссылаются на одно место в памяти).

Мне как раз и надо по адресу ReturnValue положить значение hHeap (чтобы в операторе delete его извлечь).
0
Pure
228 / 49 / 2
Регистрация: 13.03.2012
Сообщений: 453
Записей в блоге: 7
21.01.2013, 17:41 #4
IvanPryamoy_2, ReturnValue это указатель на void, то бишь void*. Типа void как такового не быть.
Незя его разыменовать. Далее hHeap это скорее всего тип HANDLE. котрый в итоге является тем же void*

http://vsokovikov.narod.ru/New_MSDN_...te_windows.htm

поэтому

ReturnValue = hHeap;

это гуд

Если надо положить по указателю какое то значение то приведи его к DWORD хотя бы.
0
IvanPryamoy_2
0 / 0 / 0
Регистрация: 21.01.2013
Сообщений: 23
21.01.2013, 18:02  [ТС] #5
Цитата Сообщение от Pure Посмотреть сообщение
IvanPryamoy_2, ReturnValue это указатель на void, то бишь void*. Типа void как такового не быть.
Незя его разыменовать. Далее hHeap это скорее всего тип HANDLE. котрый в итоге является тем же void*

http://vsokovikov.narod.ru/New_MSDN_...te_windows.htm

поэтому

ReturnValue = hHeap;

это гуд

Если надо положить по указателю какое то значение то приведи его к DWORD хотя бы.
Так в моем примере как раз кладется значение по указателю (значением является тоже указатель). Но что эта фраза значит мне непонятно.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2013, 18:02
Привет! Вот еще темы с ответами:

a=*b Что это значит? - C++
Подскажите пожалуйста!

Что это значит? - C++
Что значит условие (!a)?В каком случае будет выполняться правда? if(!a) { // что угодно } else { // что угодно }

Что это значит if (x&1) ? - C++
основным вопросом есть if (x&1) что это за условия? и что это? x>>1. какая роль в коде? unsigned long long m_recursive (unsigned long...

Что значит это условие - C++
Вот собственно код: if ( ( words = (char**)realloc(words, sizeof(char*) * (cnt + 1)) ) == NULL )


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.01.2013, 18:02
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru