struct myStruct
{
int foo;
}
myStruct bar;
bar.foo = 123;
cout<<(char *) &bar<<endl;
В заявлении cout выдается '{'. ASCII of 123 на самом деле '{' (bar.foo = 123. Изменение этого значения при печати разных символов). Что я не понимаю, так это то, чтоConfused by (char *) cast
cout<<(char *) &bar<<endl;
должен технически распечатать адрес строки. Как я могу получить доступ к данным внутри структуры с помощью (char *) cast? Использование (int *) по-прежнему возвращает адрес. Я знаю, что (char *) заставляет данные упорядочиваться побайтовым образом, но разве это не должно влиять на адрес?
'std :: cout' обрабатывает' char * 'как строку с нулевым символом и печатает как таковой. 'bar :: foo' адрес равен самому адресу bar. Поэтому вы печатаете 'bar :: foo', как будто это строка с нулевым завершением. Заметьте, он будет печатать до '\ 0', поэтому он может пройти мимо' bar :: foo', в зависимости от его значения. – lapk
Вам повезло, что нет сбоя, потому что он читает память до первого «\ 0» ... Нет гарантии, что у вас есть один доступ к запрещенной зоне. – Johan