I wrote a function along the lines of this:
void myFunc(myStruct *&out) {
out = new myStruct;
out->field1 = 1;
out->field2 = 2;
}
Now in a calling function, I might write something like this:
myStruct *data;
myFunc(data);
which will fill all the fields in data. If I omit the ‘&‘ in the declaration, this will not work. (Or rather, it will work only locally in the function but won’t change anything in the caller)
Could someone explain to me what this ‘*&‘ actually does? It looks weird and I just can’t make much sense of it.
The & symbol in a C++ variable declaration means it’s a reference.
It happens to be a reference to a pointer, which explains the semantics you’re seeing; the called function can change the pointer in the calling context, since it has a reference to it.
So, to reiterate, the “operative symbol” here is not
*&, that combination in itself doesn’t mean a whole lot. The*is part of the typemyStruct *, i.e. “pointer tomyStruct“, and the&makes it a reference, so you’d read it as “outis a reference to a pointer tomyStruct“.The original programmer could have helped, in my opinion, by writing it as:
or even (not my personal style, but of course still valid):
Of course, there are many other opinions about style. 🙂