смысл ссылки и указатель вместе?

В моем проекте есть определение вызова функции, подобного этому.

    int32 Map(void * &pMemoryPointer)

В вызывающем месте переданный параметр void *, почему мы не можем просто получить его как указатель вместо этого?

2

Решение

Не зная, что Map Функция делает, я думаю, что это наборы указатель Поэтому оно должно быть передано по ссылке.


Используя ссылку на указатель, вы можете выделить память и назначить ее указателю внутри функции. Например

void DoSomething(int*& pointerReference)
{
// Do some stuff...

pointerReference = new int[someSize];

// Do some other stuff...
}

Другой способ сделать такие функции — это вернуть указатель, но как Map Функция в вопросе возвращает что-то еще, что не может быть использовано.

6

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

Читая это задом наперед, это означает, что pMemoryPointer это ссылка (&) к указателю (*) чтобы void, Это означает, что на любой указатель, который вы передаете, ссылаются, и любая модификация, которую функция сделает для pMemoryPointer также повлияет на исходный (переданный) указатель (например, на изменение значения pMemoryPointer также изменит значение исходного указателя).

почему мы не можем просто получить его как указатель вместо этого?

Это потому, что при этом вы копируете указатель, и любые изменения, которые вы вносите в копию, не отражают оригинал.

void im_supposed_to_modify_a_pointer(void* ptr) {  // Oh no!
ptr = 0xBADF00D;
}

int* my_ptr = 0xD0GF00D;
im_supposed_to_modify_a_pointer(my_ptr);
ASSERT(my_ptr == 0xBADF00D) // FAIL!
4

Это странный прототип функции IMHO, но это значит
(Обновить) что функция Map принимает ссылку на пустой указатель в качестве параметра.

Поэтому я думаю, что это эквивалентно объявлению функции следующим образом:

 int32 Map(void** pMemoryPointer)
0
По вопросам рекламы [email protected]