Отображение адреса переменной char в C++ с использованием указателей?

Как мы можем отобразить адрес переменной char? Я нашел решение, используя приведение типов путем кулачного преобразования его в int или float или void и т. Д., А затем отображая адрес с помощью указателей. Но есть ли другая альтернатива конкретному решению без приведения типов? используя указатели, такие как

char var = 'a'; 
char* ptr; 
ptr = &var; 
cout << ptr;

но в этом случае даже указатель указывает на адрес var, но отображает значение var. Зачем? и если это так, то как мы можем получить его адрес с помощью указателей? без использования типа литья

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

или мы должны перегрузить любой оператор для конкретной проблемы?

1 ответ

Решение

Единственная причина, по которой вам нужно написать актерский состав, заключается в том, что std::ostream имеет специальную перегрузку для char * что предполагает, что данный указатель указывает на первый элемент массива символов с нулевым символом в конце и будет радостно пытаться пройти этот массив, пока он не достигнет нуля.

К сожалению, это означает, что вы не можете просто передать адрес одного символа и напечатать значение этого адреса, поэтому вам нужен приведение. Для всех других (не символьных) указателей, std::ostream уже печатает числовое представление значения указателя.

Там нет ничего, что вы можете "сделать", но на самом деле это не проблема, так как вы уже нашли решение. Если вы находитесь в общей настройке и хотите напечатать указатели объектов, просто добавьте приведение к void * и это будет работать для всех типов ввода. Поведение std::ostream является результатом выбора дизайна для удобства, позволяющего легко работать большинству вариантов использования, за счет того, что ваш конкретный вариант использования будет более подробным для написания.

Другие вопросы по тегам