4

我目前正在编写一个项目,我有一个看起来像这样的函数:

Room::addItem(Item*&); //not written by me

我在理解作为参数发送什么时遇到了一些麻烦。“*&”对我来说搞砸了。

我尝试了以下方法:

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

编辑:如果您解释一下“*&”的含义,那就太好了。下次我遇到它时,我想了解它;)

4

4 回答 4

2

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++ 中有效。

于 2012-11-21T13:13:58.443 回答
2

在我看来,您的函数需要对指针的引用。例如,MSDN 有一些语法类似的示例代码

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

您可能想要这样做的原因有多种,但您最喜欢的搜索引擎应该能够帮助您。一个为您指明正确方向的博客条目在这里

于 2012-11-21T13:14:57.520 回答
1

参数类型是对指向 an 的指针的引用Item,而您需要传递给它的是指向 an Item(ie Item*) 的指针,此外,它必须是左值(因为可能 Room::addItem会修改指针)。

于 2012-11-21T13:15:28.890 回答
1

您需要将指针传递给函数

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

& 表示该函数将使用引用并能够更改它的值

于 2012-11-21T13:17:31.290 回答