I am familiar with c but new to c++. What is the difference between below two functions? How the both the programs functionally same? How actually the address is passed in scenario 1 and values are modified without de-referencing the variables.
Scenario 1
    void duplicate (int& a, int& b, int& c)
    {
    a*=2; 
    b*=2;
    c*=2;
    }
    int main ()
    {
    int x=1, y=3, z=7;
    duplicate (x, y, z); 
    cout << "x=" << x << ", y=" << y << ", z=" << z;
    return 0;
    }
Scenario 2
    #include <iostream>
    using namespace std;
    void duplicate (int *a, int *b, int *c) 
    {
    *a*=2;
    *b*=2;
    *c*=2;
    }
    int main ()
    {
    int x=1, y=3, z=7;
    duplicate (&x, &y, &z);
    cout << "x=" << x << ", y=" << y << ", z=" << z << endl;
    return 0;
    }
