This:
const char * terry = \"hello\";
cout<
prints hello
instead of the memory address of the \'h\'
.
The reason for that is that std::cout
will treat a char *
as a pointer to (the first character of) a C-style string and print it as such. If you want the address instead, you can just cast it to a pointer that isn't treated that way, something like:
cout << (void *) terry;
(or use the const void *
cast if you're worried about casting away constness, something that's not an issue in this particular case).
If you're more of a purist than pragmatist, you can also use the C++ static_cast
, along the lines of:
cout << static_cast (terry);
though it's unnecessary in this particular case, the cast to a void *
will work fine. The following sample code shows all these options in action:
#include
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 (terry) << '\n';
return 0;
}
outputting (the address may be different in your environment):
hello
0x8048870
0x8048870
0x8048870
Note that, when using the static_cast
, you should ensure you don't try to cast away the constness with static_cast
(that's what const_cast
is for). This is one of the checks done by the newer C++ casts and the old-style cast does not have this limitation.