Отображение адреса символов

0

Таким образом, у нас есть назначение в моем классе C++ для создания указателя на символ, а инструкции:

Для каждой декларации необходимо:

  1. Инициализировать указатель на соответствующее значение адреса

  2. Покажите содержимое указателя (сопоставьте это значение с адресом того, что указывает на)

  3. Покажите содержимое указателя (сопоставьте это значение с исходным содержимым)

Всякий раз, когда я пытаюсь отобразить адрес char a with & a, он просто выводит значение, сохраненное в char a, а не на адрес. Когда я пытаюсь сделать это с помощью целых чисел, он работает так, как я хочу.

Может ли кто-нибудь дать мне представление о том, что я делаю неправильно?

#include <iostream>

using namespace std;

int main()
{

    // Question 1, Part I

    // (a)
    char a = 'A';

    char * pa = &a;

    //(b)
    cout << "Address of a = " << &a << endl;
    cout << "Contents of pa = " << pa << endl;

    //(c)
    cout << "Contents of a = "<< a << endl;
    cout << "What pa points to = "<< *pa << endl;

    return 0;
}

Редактировать и запустить

  • 2
    Бросок в void* . cout имеет специальную обработку для char* которая печатает строку. Кстати, ваш код демонстрирует неопределенное поведение.
Теги:
pointers
reference
char

2 ответа

1

Когда вы указываете указатель на char для cout, он будет рассматривать его как строку с нулевым завершением c.

Перепишите его в указатель void:

cout << "Address of a = " << static_cast<void*>(&a)  << endl;

Стандарт гарантирует, что адрес не изменяется в разделе 4.10/2:

Prvalue типа "указатель на cv T", где T - тип объекта, может быть преобразован в prvalue типа "указатель на cv void". Результат преобразования значения ненулевого указателя указателя на тип объекта на "указатель на cv void" представляет адрес того же байта в памяти, что и исходное значение указателя.

Здесь объяснение о указателе на char в выходных потоках. И здесь объяснение, почему void* вызывает отображение указателя.

-1

Измените эти утверждения

cout << "Address of a = " << &a << endl;
cout << "Contents of pa = " << pa << endl;

в

cout << "Address of a = " << ( void * )&a << endl;
cout << "Contents of pa = " << ( void * )pa << endl;

или

cout << "Address of a = " << reinterpret_cast<void *>( &a ) << endl;
cout << "Contents of pa = " << reinterpret_cast<void *>( pa ) << endl;

или

cout << "Address of a = " << static_cast<void *>( &a ) << endl;
cout << "Contents of pa = " << static_cast<void *>( pa ) << endl;   

Все три варианта будут работать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню