/*
 * @topic Q00405 2/6/2014 C strings, addresses, and pointers
 * @brief in-class demo -- function taking pointer as a parameter
*/

#include <iostream>

void pause()
{
    //----------------------------------------------
    // prevent window from closing before exiting:
    //----------------------------------------------
    char ch; // ch is a variable that holds a character

    // curious \n is a "line feed" control character,
    // it moves the cursor to the next line:
    std::cout << "\nEnter X to Exit: ";

    std::cin.ignore( 1, '\n' ); // extract and discard characters
    std::cin.clear();           // this clears cin state
    std::cin.get( ch ); // this reads a character from the keyboard,
                        // and pauses the program from before exiting
}


// This function expects an address of a character
// The function has a return type "void" which indicates
// that it does not return any value.
void print_message( char* msg )
{
    // cout prints all characters at the given address
    // until it finds NULL character at the end of the string:
    std::cout << msg << '\n';
}


// This function expects an address of an integer
// The function has a return type "void" which indicates
// that it does not return any value.
void print_message( int* ptr_int )
{
    // When cout sees an address of an integer, it prints
    // the address as a hexadecimal number:
    std::cout << ptr_int << '\n';
}


int main()
{
    // call function that expects a pointer to a character:
    print_message( "HELLO, FRIENDS!" );

    int value = 100;
    // call function that expects a pointer to an integer:
    print_message( &value );

    double amt = 10.99;
    char newline = '\n';
    amt = amt * value;

    // Example that demonstrates that "Hello" returns an addresss
    // of its first character (H) in memory:
    int address_of_hello = (int) "Hello";

    // std::hex signals that we want to print address_of_hello as
    // a hexadecimal number:
    std::cout << "Hello" << ' ' << std::hex << address_of_hello << newline;
    std::cout << value << newline;
    std::cout << amt   << newline;
    pause();
}