void * * указатель в аргументе функции c++


Как вывести переменную wchar_t * из аргумента функции void ** в этой ситуации?

Я хочу вставить значение t в переменную ChangeMe с помощью void**, как это сделать?

void foo(void **v){ wchar_t *t = L"String is changed!"; *(wchar_t*)v = *t; } 
wchar_t *ChangeMe = L"";

Попробуйте уже (не работает):

foo((void**)ChangeMe );
1 2

1 ответ:

Вы, вероятно, хотели написать

*((wchar_t**)v) = t; 

Обратите внимание, что значение t выходит из области видимости после возврата. Это может сработать в данном случае, поскольку адрес литерала имеет статическую длительность хранения.

Также при передаче функции ChangeMe необходимо указать ее адрес на самом деле:

foo((void**)&ChangeMe);
         // ^

Вот полностью рабочий образец.


Не беспокойтесь о пустых указателях; напишите правильный код C++.