I know Class *cls is a pointer, and Class &cls takes the address, but what is
void fucction1( Class *&cls) If I have Class c, what should I pass to function1()?
Thanks!
Besides, what James explained in his response, let me add one more important point to it.
While you can write Class* & (reference to pointer) which is perfectly valid in C++ only, you cannot write Class& * (pointer to reference), as you cannot have a pointer to a reference to any type. In C++, pointer to reference is illegal.
§8.3.2/4 from the language specification reads,
There shall be no references to references, no arrays of references, and no pointers to references.
If I have Class c, what should I pass to function1()?
You can write your calling code like this:
Class *ptrClass; //your code; may be you want to initialize ptrClass; function1(ptrClass); //if you change the value of the pointer (i.e ptrClass) in function1(), //that value will be reflected here! //your code As said, a reference to a pointer to Class.
Class * to the functionThis is a rather uncommon interface, you need more details to know what pointers are expected, and what you have to do with them.
Two examples:
Iteration
bool GetNext(Classs *& class) { if (class == 0) { class = someList.GetFirstObject(); return true; } class = somePool.GetObjectAbove(class); // get next return class != 0; } // Use for oterating through items: Class * value = 0; while (GetNext(value)) Handle(value); Something completely different
void function (Class *& obj) { if (IsFullMoon()) { delete obj; obj = new Class(GetMoonPos()); } } In that case, the pointer you pass must be new-allocated, and the pointer you receive you need to pass either to function again, or be delete'd by you.