Причиной этого является то, что std::cout
будет обрабатывать char *
как указатель на (первый символ) строки стиля C и печатать его как таковой. Если вы хотите использовать адрес , вы можете просто передать его указателю, который не был обработан таким образом, например:
cout << (void *) terry;
(или используйте бросок const void *
, если вы беспокоитесь о том, чтобы отбросить созвездие, что-то, что не является проблемой в данном конкретном случае).
Если вы скорее пурист, чем прагматик, вы также можете использовать C ++ static_cast
по строкам:
cout << static_cast <const void *> (terry);
, хотя в этом конкретном случае это необязательно, приведение к void *
будет работать нормально. Следующий пример кода показывает все эти параметры в действии:
#include <iostream>
int main (void) {
const char *terry = "hello";
std::cout << terry << '\n';
std::cout << (void *) terry << '\n';
std::cout << (const void *) terry << '\n';
std::cout << static_cast<const void *> (terry) << '\n';
return 0;
}
вывод (адрес может быть другим в вашей среде):
hello
0x8048870
0x8048870
0x8048870
Обратите внимание, что при использовании кнопки static_cast
, вы должны убедиться, что вы не пытаетесь отбросить константу с помощью static_cast <void *>
(это для const_cast
). Это одна из проверок, выполненных более новыми C ++-переходами, и старинный стиль не имеет этого ограничения.