// On our second day we talked a lot about pointers.
// @topic T00200 Second day lecture -- the concept of pointers
// @brief Pointer is a data type

#include <iostream>
#include <string>
using namespace std;

// Function taking pointers as parameters:
void indirect_demo( int* pvalue, string* pmessage )
{
    *pvalue = 456;
    *pmessage = "Goodbye";
    (*pmessage).length();
    pmessage->length(); // pointer-to-member deref...
}

// Various ways to printing characters:
void print( char* pmessage )
{
    char ch = 'A';
    cout << ch << '\n'; 
    cout << *pmessage << '\n';
    cout << pmessage << '\n';
    cout << pmessage[ 2 ] << '\n'; // more on this next week!!
}

int main()
{
    // First, we talked about integers and strings:
    int x = 123;
    int y = 789;
    
    // NULL is often used to initialize pointers:
    int* ptrx = NULL; // NULL macro iz defined as 0 (zero)

    // Pointer is a variable -- it can store addresses:
    ptrx = &x;        // take address of x and store in ptrx
    ptrx = &y;        // take address of y and store in ptrx

    string str = "Hello";
    string str2;
    string* ptrstr = &str; // pointer to a string

    // Demonstrates passing addresses to a function which
    // expects pointers as parameters:
    indirect_demo( &x, &str );
    indirect_demo( &y, &str2 );

    // At the end of the class we started talking about pointers to characters:
    print( "Hello" );
    return 0;
}