Я решил это с помощью списка аргументов переменной длины
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]);
пустой указатель, то же как
void *pMemPhy
иначе "Указатель на что-то, но Вам решать понимать это".
BOOL DoSomething ( PVOID pMemPhy )
{
strcpy((char *)pMemPhy, "I love buffer overflows!");
return TRUE;
}
Это пустой указатель - указатель на адрес памяти без информации о типе значения, на которое это указывает. Поэтому необходимо бросить указатель на тип такой как (char *)pMemPhy
или (int *)pMemPhy
перед использованием указателя так, чтобы компилятор знал, сколько памяти он работает с (1 байт для символа, 4 байта для интервала, и т.д.)
Как другие сказали, это эквивалентно void *
.
void
указатели часто используются в операциях памяти (memcpy
, memset
, и т.д....), так как каждый не хочет принимать тип данных в данном адресе.
Указателям и пустым указателям предоставляют хорошее лечение в этот статья от http://cplusplus.com .
Это и другая мнемосхема как BOOL, LPCTSTR имеют его источник с Windows, какой BTW был разработан перед существованием стандарта C, и не зависеть в конкретном компиляторе это использовало свои собственные типы.
можно проверить Старую Новую Вещь блог на большее количество историй, собирающихся история разработки Windows и ее причуды, которые останутся с нами ( http://blogs.msdn.com/oldnewthing ).
typedef void * PVOID;
, Если Вы - вопрос, то, какое использование является пустым указателем? Наиболее популярный способ использования состоит в том при передаче указателя на память, которая действительно не заботится о типе. свободный (), например.
, Если библиотека экспортирует функцию, которая может взять несколько типов указателей, но хочет поддерживать языки как C, которые не имеют перегрузки функции, затем освобождают * работы.
Это кажется, что это - просто псевдоним (определите или определение типа) для void*. Я понятия не имею, почему люди думают, что это было бы лучше, но я знаю, что некоторым API нравится использовать это в случае, если реализация типа изменяется в будущем.
я знаю, что ранние версии окон использовали вещи как STDCALL как префикс ко многим функциям, и определение STDCALL могло измениться, на основе которой версии Windows Вы скомпилировали для. Это из памяти (который затронут алкоголем после многих лет :-), не полагайтесь на это как на евангелие. Это в основном корректно, но детали могли бы немного отличаться.