One thing that I have not been able to understand is when to use certain types of pointers for arguments in functions.
Consider a function that receives an integer as its parameter, and doubles whatever that value may be. A function for that could be:
void doubleTheValue(int *myNum)
{
    *myNum *= 2;
}
int main()
{
    int number = 2;
    doubleTheValue(&number);
    // prints 4
    cout << number << endl;
    return 0;
}
This makes sense to me. The function receives an integer pointer, and you pass in a reference to the variable 'number' and it changes the value. Now, what confuses me is if you did this instead:
void doubleTheValue(int &myNum)
{
    myNum *= 2;
}
int main()
{
    int number = 2;
    doubleTheValue(number);
    // this also prints 4
    cout << number << endl;
    return 0;
}
Note the argument for the function is different. What exactly is this doing internally, and why would you use it over the aforementioned method?
 
     
     
     
     
    