I am very confused with c++ pointers and reference operators. My main confusion is the following (simple ) code:
#include <iostream>
using namespace std;
void changeInt(int &a)
{
    a *= 3;
}
int main()
{
    int n = 3;
    changeInt(n);
    cout << n << endl; 
    return 0;
}
Mainly, I am confused as to why changing the address (&a) changes the actual variable (n). When I first attempted this problem this was my code:
#include <iostream>
using namespace std;
void changeInt(int &a)
{
    *a *= 3;
}
int main()
{
    int n = 3;
    changeInt(n);
    cout << n << endl; 
    return 0;
}
But this gives me an error. Why is it that when I change the address it changes the variable, but when I change the value pointed by the address I get an error?
 
     
     
     
    