I have a pretty basic c++ question (coming from a Python background).
I'm working through an example from the 'tour basics' book by Bjarne Stroustrup. Its basically this:
#include <iostream>
using namespace std;
struct Vector {
    int sz;         // number of elements in vector
    double* elem;   // pointer to elements in vector
};
void vector_init(Vector& v, int s)
{
    v.elem = new double[s];     // allocate an array of s doubles
    v.sz = s;
}
int main()
{
    Vector v;
    vector_init(v, 10);
    return 0;
};
What is causing me confusion is that the function vector_init takes a memory address of a vector for its first argument, but when its being used in the main, we are passing the vector v itself, not its memory address (which I assume would be &v rather than v). 
This is working code and it compiles, but why do you not need to give the memory address as an argument here?
