Cтранное значение указателя

317
30 августа 2017, 16:24

Вопрос: почему значение указателя (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э), указатель это же целый тип, а тут буквы какие-то. Помогите разобраться почему такое поведение.

Answer 1

Все есть байты и ничего кроме байтов. Дальше начинается интерпретация байтов: в целое число, в строку, в исполняемый код, в байт-код и так далее.

Оператор new(), если грубо говорить, выделяет память и возвращает, к примеру, 4 байта, в которых заключен адрес этой памяти. Если они интерпретируются как число, там будет, к примеру, 0x30303030. А если эти же самые байты интерпретировать как строку - "0000".

У вас выделяется память под один байт. При выводе из указателя берется адрес этой выделенной памяти и оттуда выводится строка. Ожидается, что строка терминируется нулем, но явно вы этот ноль нигде не пишете в память, вот и выводится два символа с мусором.

READ ALSO
Регулярные выражения C++ [требует правки]

Регулярные выражения C++ [требует правки]

Необходимо получить текст между двумя блокамиДопустим, есть такой код:

608
undefined: не могу установить значение атрибута

undefined: не могу установить значение атрибута

В зависимости от страницы, на которой находится пользователь, ему должна показываться форма с датойПри условии c:if test="${listName != 'TODAY' and listName...

320
Нужна помощь в jquery

Нужна помощь в jquery

Ребят, такие дела, нужно при разрешении меньше 992px добавить ссылкам меню определенный классКак класс добавить я сам понимаю, помогите дополнить...

332
Создать массив параметров

Создать массив параметров

Пробую использовать библиотеку bootboxjs

397