在我的项目中,有一个像这样的函数调用的定义。
int32 Map(void * &pMemoryPointer)
在调用的地方,传递的参数是无效*,为什么我们只能将它作为指针本身接收而不是这个?
答案 0 :(得分:6)
在不知道Map
函数的作用的情况下,我猜它设置指针。因此必须通过引用传递。
使用对指针的引用,可以分配内存并将其分配给函数内部的指针。例如
void DoSomething(int*& pointerReference)
{
// Do some stuff...
pointerReference = new int[someSize];
// Do some other stuff...
}
制作类似函数的另一种方法是返回指针,但问题中的Map
函数会返回其他无法使用的函数。
答案 1 :(得分:4)
向后阅读,这意味着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!
答案 2 :(得分:0)
这是一个奇怪的函数原型恕我直言,但它意味着 (更新)Map函数接受对void指针的引用作为参数。
所以我认为,它等同于声明这样的函数:
int32 Map(void** pMemoryPointer)