В настоящее время я пишу код для проекта, и у меня есть функция, которая выглядит следующим образом:
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 ++.
Мне кажется, что ваша функция ожидает ссылку на указатель. Например, MSDN имеет некоторые образец кода с похожим синтаксисом.
// Add2: Add a node to the binary tree.
// Uses reference to pointer
int Add2( BTree*& Root, char *szToAdd ) {
if ( Root == 0 ) {
...
Есть несколько причин, почему вы можете захотеть сделать это, но ваш любимый поисковик должен быть в состоянии помочь вам там. Одна запись в блоге, чтобы указать вам правильное направление Вот.
Тип параметра является ссылкой на указатель на Item
, а также
то, что вам нужно передать это указатель на Item
(Т.е.
Item*
), который, кроме того, должен быть lvalue (потому что, по-видимому,
Room::addItem
собирается изменить указатель).
вам нужно передать указатель на функцию
Item item = loadItem()
foo.addItem(&item);
& означает, что функция будет использовать ссылку и сможет изменить ее значение