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