[си] приведение типа (char*) &(char*)
(char*) &(char*) и как оно работает?неправильно понял что надо понять
надо понять, что значит (char*) & lpMsgBuf
это взяли адрес переменной lpMsgBuf и привели его к указателю на char.
У меня в мозгу картинка памяти выглядит так (lpMsgBuf.gif, 5Kb)
Т.е. если мы преобразовываем <&lpMsgBuf> к указателю на char, то мы указатель <lpMsgBuf> преобразовываем в char?
Т.е. если мы преобразовываем <&lpMsgBuf> к указателю на char, то мы указатель <lpMsgBuf> преобразовываем в char?Нет. Мы просто преобразуем void** к char*.
Как память после такого преобразования выглядеть будет?
Как память после такого преобразования выглядеть будет?Точно так же. Такое преобразование типов не меняет содержимое памяти.
Причем получится что char'ы она будет писать прямо по адресу lpMsgBuf, а не в lpMsgBuf[0] и т.п.
Но функция-то судя по ее объявлению ожидает указатель на char, и насколько я понимаю (опять же из ее объявления) будет туда писать.Нет. Ей передаётся флаг, и она обратно переприводит типы.
Тогда, если бы можно было заранее узнать требуемый размер и выделять память самостоятельно, то эти танцы с (char*) & не нужны будут?
Эхх, исходники б
Спасибо, за разьяснения. А то, совсем я запутался.
Оставить комментарий
feliks28
Разбираюсь в функции FormatMessage. Из приведенного там примера заинтересовали две строчки:LPVOID lpMsgBuf;
FormatMessage(..., (LPTSTR) &lpMsgBuf, 0, NULL );
Т.е. для ANSI (и т.к. мне не нужна универсальность типа можно переписать в
char* lpMsgBuf;
FormatMessageA(..., (char*) &lpMsgBuf, 0, NULL );
Оно компилируется и нормально работает, но у меня возникает сильное непонимание того, что есть (char*) &(char*) и как оно работает?