This:
const char * terry = "hello"; cout<<terry;
prints hello
instead of the memory address of the 'h'
. Why is this happening?
String is an array of characters. And vowels are characters from the set {a,e,i,o,u}. Pointer is a variable that stores the value of memory location on a variable. To find the number of vowels in a string.
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.
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 <const void *> (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 <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; }
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 <void *>
(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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With