C++ c++;发送什么参数有问题

C++ c++;发送什么参数有问题,c++,pointers,parameters,C++,Pointers,Parameters,我目前正在为一个项目编写代码,我有一个类似以下的函数: Room::addItem(Item*&); //not written by me 我在理解作为参数发送的内容时遇到一些困难。。“*&”把我搞砸了 我尝试了以下方法: foo.addItem(loadItem()); //Returns an Item-object /*and*/ foo.addItem(loadItem()); //Returns an Item-pointer 编辑:如果你

我目前正在为一个项目编写代码,我有一个类似以下的函数:

Room::addItem(Item*&); //not written by me
我在理解作为参数发送的内容时遇到一些困难。。“*&”把我搞砸了

我尝试了以下方法:

foo.addItem(loadItem());         //Returns an Item-object
/*and*/
foo.addItem(loadItem());         //Returns an Item-pointer

编辑:如果你能解释一下“*&”是什么意思就好了。我想在下次遇到它时理解它;)

函数接受
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++中有效。

,看起来我的函数就像是对指针的引用。例如,MSDN有一些语法类似的代码

// Add2: Add a node to the binary tree.
//       Uses reference to pointer
int Add2( BTree*& Root, char *szToAdd ) {
   if ( Root == 0 ) {
...

有各种各样的原因,你可能想这样做,但你最喜欢的搜索引擎应该能够帮助你做到这一点。一个指向正确方向的博客条目是。

参数类型是指向
项的指针的引用,并且
您需要传递给它的是一个指向
项的指针(即。
项*
),此外,它必须是左值(因为,
Room::addItem
将修改指针)。

您需要将指针传递给函数

Item item = loadItem()
foo.addItem(&item);

&这意味着函数将使用引用并能够更改它的值

*&
是对
指针的引用,您应该向它传递对
对象的引用,即
&itemObject
。我猜这是一个写得很糟糕的代码,而且可能不会修改该指针。另外,因为引用是非常量,指针必须是左值——例如,它不能是函数的返回值(除非函数返回
项*&
)。听起来不错,但为什么它不接受我发送给它的指针呢?简而言之,函数在发送指针时如下所示:Item*loadItem([parameters]){Item tmp=new Item([parameters]);return&tmp;}