Я предполагаю, string
означает std::string
.
Это не просто небезопасно, но и недействительно.Вопрос имеет fun1((demo*)pr00)
.
Это попытка привести структуру к указателю.Неверно, и если у вашего компилятора есть настройки, где это разрешено, отключите их.
Есть немного более интересный вопрос относительно fun1((demo*)&pr00)
.Обратите внимание, что &
принимает адрес pr00
.
Это все еще неопределенное поведение, но по крайней мере это преобразование указателей между несвязанными структурами.
Вы можете определить void fun2(char*cp)
и вызвать fun2((char*)&pr00)
хотя то, что вы можете безопасно делать с cp
внутри fun2()
, имеет ряд ограничений.
Вы не должны делать никаких предположений относительно макета std::string
, поэтому вы должны 'получить доступ к cp
(иособенно не пиши в него) с любым предположением что ты можешь найти.