Вопрос: почему значение указателя (pChar = muэ), указатель это же целый тип, а тут буквы какие-то. Помогите разобраться почему такое поведение.
Код:
//4. указатель на указатель на char
typedef char * myPointerChar;
typedef myPointerChar * myPointerPointerChar; //char**
int main()
{
myPointerChar pChar = /*&ch3*/ new char('m');
myPointerPointerChar ppChar = &pChar;
std::cout << "myPointerChar pChar = " << pChar << " ;*myPointerChar *pChar = " << *pChar << "\n";
std::cout << "myPointerPointerChar ppChar = " << ppChar << " ;*myPointerPointerChar *ppChar = " << *ppChar << " ;**myPointerPointerChar **ppChar = " << **ppChar << "\n";
return 0;
}
Выводимое значение:
myPointerChar pChar = muэ ;*myPointerChar *pChar = m
myPointerPointerChar ppChar = 0x61fe7c ;*myPointerPointerChar *ppChar = muэ ;**myPointerPointerChar **ppChar = m
Вопрос: почему значение указателя (pChar = muэ), указатель это же целый тип, а тут буквы какие-то. Помогите разобраться почему такое поведение.
Все есть байты и ничего кроме байтов. Дальше начинается интерпретация байтов: в целое число, в строку, в исполняемый код, в байт-код и так далее.
Оператор new(), если грубо говорить, выделяет память и возвращает, к примеру, 4 байта, в которых заключен адрес этой памяти. Если они интерпретируются как число, там будет, к примеру, 0x30303030. А если эти же самые байты интерпретировать как строку - "0000".
У вас выделяется память под один байт. При выводе из указателя берется адрес этой выделенной памяти и оттуда выводится строка. Ожидается, что строка терминируется нулем, но явно вы этот ноль нигде не пишете в память, вот и выводится два символа с мусором.
Продвижение своими сайтами как стратегия роста и независимости