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

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

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

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

21.01.2013, 17:00. Просмотров 414. Ответов 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: недопустимое косвенное обращение". Так чем вышепревиденное извращение с преобразованием к двойному указателю, а потом обращение по нему лучше?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.01.2013, 17:00     Что это значит: *(void**)ReturnValue) = hHeap; ?
Посмотрите здесь:

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Pure
228 / 49 / 2
Регистрация: 13.03.2012
Сообщений: 453
Записей в блоге: 7
21.01.2013, 17:09     Что это значит: *(void**)ReturnValue) = hHeap; ? #2
Изначально ReturnValue - просто указатель

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

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


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

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

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

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

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

поэтому

ReturnValue = hHeap;

это гуд

Если надо положить по указателю какое то значение то приведи его к DWORD хотя бы.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2013, 18:02     Что это значит: *(void**)ReturnValue) = hHeap; ?
Еще ссылки по теме:

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

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

Что это значит 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 )

что значит !a и a%=(c+10) и как это записать? - C++
что значит !a и a%=(c+10) и как это записать? заранее благодарен...

Не могу понять, что это значит: while(i<10/2) - C++
/*обращение массива*/ #include &lt;stdio.h&gt; main() { int p,i=0; static a={10,11,12,13,14, 15,16,17,18,19}; while(i&lt;10/2) { ...


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

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

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

поэтому

ReturnValue = hHeap;

это гуд

Если надо положить по указателю какое то значение то приведи его к DWORD хотя бы.
Так в моем примере как раз кладется значение по указателю (значением является тоже указатель). Но что эта фраза значит мне непонятно.
Yandex
Объявления
21.01.2013, 18:02     Что это значит: *(void**)ReturnValue) = hHeap; ?
Ответ Создать тему
Опции темы

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