This:
const char * terry = \"hello\";
cout<
prints hello instead of the memory address of the \'h\'.
The << operator on std::cout is overloaded. Its behavior depends on the type of the right operand. (It's actually several different functions, all named operator<<; the compiler decides which one to call.)
If you give it a char* or const char*, it treats the operand as a pointer to (the first character of) a C-style string, and prints the contents of that string:
const char * terry = "hello";
cout << terry; // prints "hello"
If you give it a char value, it prints that value as a character:
cout << *terry; // prints "h"
cout << terry[0]; // the same
If you give it a pointer of type void*, it prints that pointer value (in some implementation-defined way, typically hexadecimal):
cout << static_cast(terry); // prints something like 0x4008e4
Treating a char* or const char* as a pointer to a C-style string is a special case, and the only one (that I can think of) that causes operator<< to print something other than the value of the operand. The reason for this goes back to C++'s roots in C, which doesn't have a "string" type and manipulates strings via char* pointers.
There are numerous other overloads for operator<<, for various integer and floating-point numeric types, for std::string, and so forth.