указатели — с ++ проблемы с каким параметром отправлять

В настоящее время я пишу код для проекта, и у меня есть функция, которая выглядит следующим образом:

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

У меня возникли проблемы с пониманием того, что отправить в качестве параметра .. «*&»испорти это для меня.

Я пробовал следующее:

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

редактировать: было бы хорошо, если вы объясните, что «*&значит, я хочу понять это в следующий раз, когда столкнусь с ним;)

4

Решение

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 ++.

2

Другие решения

Мне кажется, что ваша функция ожидает ссылку на указатель. Например, MSDN имеет некоторые образец кода с похожим синтаксисом.

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

Есть несколько причин, почему вы можете захотеть сделать это, но ваш любимый поисковик должен быть в состоянии помочь вам там. Одна запись в блоге, чтобы указать вам правильное направление Вот.

2

Тип параметра является ссылкой на указатель на Item, а также
то, что вам нужно передать это указатель на Item (Т.е.
Item*), который, кроме того, должен быть lvalue (потому что, по-видимому,
Room::addItem собирается изменить указатель).

1

вам нужно передать указатель на функцию

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

& означает, что функция будет использовать ссылку и сможет изменить ее значение

1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector