我目前正在编写一个项目,我有一个如下所示的函数:
Room::addItem(Item*&); //not written by me
我在理解要作为参数发送什么时遇到了一些麻烦。“*&”把我搞得一团糟。
我试过以下方法:
foo.addItem(loadItem()); //Returns an Item-object
/*and*/
foo.addItem(loadItem()); //Returns an Item-pointer
编辑:如果您能解释一下“*&”的含义,那就太好了。我想在下次遇到它时了解它;)
最佳答案
addItem
函数接受类型为 Item*
的参数,指针通过引用传递。这意味着函数 addItem
可以在内部修改指针。这也可能意味着正在该函数内部重新分配或修改对象。
例子:
void pointerByValue(int* ptr)
{
ptr = new int[10];
}
void pointerByReference(int*& ptr)
{
ptr = new int[10];
}
void main()
{
int* p = NULL; //A NULL pointer
pointerByValue(p); //p is still NULL
pointerByReference(p); //memory has now been allocated to p
}
引用指针仅在 C++ 中有效。
关于c++发送什么参数的麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13494024/