Что такое тип данных PVOID?

Я решил это с помощью списка аргументов переменной длины

public static function LoadWithParams($name, ...$args)
{
     foreach ($args as $n)
     {
         ${key($n)} = array_pop($n);
     }
     include Config::template_dir."/tpl.{$name}.php";
}

И вызов с

Templates::LoadWithParams("head", ["x" => $x]);
14
задан RAM 23 January 2018 в 17:00
поделиться

6 ответов

пустой указатель, то же как

void *pMemPhy

иначе "Указатель на что-то, но Вам решать понимать это".

BOOL DoSomething ( PVOID pMemPhy )
{
    strcpy((char *)pMemPhy, "I love buffer overflows!");
    return TRUE;
}
21
ответ дан 1 December 2019 в 06:31
поделиться

Это пустой указатель - указатель на адрес памяти без информации о типе значения, на которое это указывает. Поэтому необходимо бросить указатель на тип такой как (char *)pMemPhy или (int *)pMemPhy перед использованием указателя так, чтобы компилятор знал, сколько памяти он работает с (1 байт для символа, 4 байта для интервала, и т.д.)

12
ответ дан 1 December 2019 в 06:31
поделиться

Как другие сказали, это эквивалентно void *.

void указатели часто используются в операциях памяти (memcpy, memset, и т.д....), так как каждый не хочет принимать тип данных в данном адресе.

Указателям и пустым указателям предоставляют хорошее лечение в этот статья от http://cplusplus.com .

4
ответ дан 1 December 2019 в 06:31
поделиться

Это и другая мнемосхема как BOOL, LPCTSTR имеют его источник с Windows, какой BTW был разработан перед существованием стандарта C, и не зависеть в конкретном компиляторе это использовало свои собственные типы.

можно проверить Старую Новую Вещь блог на большее количество историй, собирающихся история разработки Windows и ее причуды, которые останутся с нами ( http://blogs.msdn.com/oldnewthing ).

4
ответ дан 1 December 2019 в 06:31
поделиться
typedef void * PVOID;

, Если Вы - вопрос, то, какое использование является пустым указателем? Наиболее популярный способ использования состоит в том при передаче указателя на память, которая действительно не заботится о типе. свободный (), например.

, Если библиотека экспортирует функцию, которая может взять несколько типов указателей, но хочет поддерживать языки как C, которые не имеют перегрузки функции, затем освобождают * работы.

4
ответ дан 1 December 2019 в 06:31
поделиться

Это кажется, что это - просто псевдоним (определите или определение типа) для void*. Я понятия не имею, почему люди думают, что это было бы лучше, но я знаю, что некоторым API нравится использовать это в случае, если реализация типа изменяется в будущем.

я знаю, что ранние версии окон использовали вещи как STDCALL как префикс ко многим функциям, и определение STDCALL могло измениться, на основе которой версии Windows Вы скомпилировали для. Это из памяти (который затронут алкоголем после многих лет :-), не полагайтесь на это как на евангелие. Это в основном корректно, но детали могли бы немного отличаться.

1
ответ дан 1 December 2019 в 06:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: