c++发送什么参数的麻烦

标签 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

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

最佳答案

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/

相关文章:

c++ - 内存映射文件和指向易失对象的指针

C++ CMFCPropertyGridColorProperty 启用自动按钮

c++ - 我想在 Windows 下使用 C++ 以某种基本方式表示西里尔字符

c++ - 在 return 语句中取消引用的指针会发生什么?

c++ - 为什么我的 C++ 程序在将 lambda 转换为函数指针时崩溃

c++ - 返回对自定义对象的引用时 Boost.Python 出错

c++ - 移动立方体(C++ 到 C#)

javascript - 如何访问 AngularJs Controller 中的路由参数

c# - 什么是更好的方法来实现 C# 线程来处理函数以在没有锁定用户界面的情况下获取数据库上的数据

c++ - 尝试通过引用传递对象时出现编译错误