как мы можем отобразить адрес переменной char? Я нашел решение, используя приведение типов путем кулачного преобразования его в int или float или void и т. Д., А затем отображая адрес с помощью указателей. Но есть ли другая альтернатива конкретному решению без приведения типов? используя указатели, такие как
char var = 'a';
char* ptr;
ptr = &var;
cout << ptr;
но в этом случае даже указатель указывает на адрес var, но отображает значение var. Зачем? и если это так, то как мы можем получить адрес var с помощью указателей?
без использования типа литья
cout << "Address of var = " << static_cast<void*>(&var) << endl;
или мы должны перегрузить любой оператор для конкретной проблемы?
Единственная причина, по которой вам нужно написать актерский состав, заключается в том, что std::ostream
имеет специальную перегрузку для char *
который предполагает что данный указатель указывает на первый элемент массива символов с нулевым символом в конце и будет радостно пытаться пройти этот массив, пока он не достигнет нуля.
К сожалению, это означает, что вы не можете просто передать адрес одного символа и напечатать значение этого адреса, поэтому вам нужен приведение. Для всех других (не символьных) указателей, std::ostream
уже печатает числовое представление значения указателя.
Там нет ничего, что вы можете «сделать», но на самом деле это не проблема, так как вы уже нашли решение. Если вы находитесь в общей настройке и хотите напечатать указатели объектов, просто добавьте приведение к void *
и это будет работать для всех типов ввода. Поведение std::ostream
является результатом выбора дизайна для удобства, позволяющего легко работать подавляющему большинству вариантов использования, за счет того, что ваш конкретный вариант использования будет более подробным для написания.