2

在我的项目中,有这样一个函数调用的定义。

    int32 Map(void * &pMemoryPointer)

在调用的地方,传递的参数是 void*,为什么我们不能直接接收它作为指针本身,而不是这个?

4

3 回答 3

6

在不知道该Map函数的作用的情况下,我猜它设置了指针。因此它必须通过引用传递。


使用对指针的引用,您可以分配内存并将其分配给函数内部的指针。例如

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

    pointerReference = new int[someSize];

    // Do some other stuff...
}

制作这样的函数的另一种方法是返回指针,但由于Map问题中的函数返回了其他无法使用的东西。

于 2013-10-24T07:40:49.883 回答
4

向后阅读,这意味着它是对指针 ( )pMemoryPointer的引用 ( ) 。这意味着您传递的任何指针都会被引用,并且该函数将对原始(传递的)指针进行任何修改(例如更改 的值也会更改原始指针的值)。&*voidpMemoryPointerpMemoryPointer

为什么我们不能只接收它作为指针本身,而不是这个?

那是因为这样做,您正在复制指针,并且您对副本所做的任何更改都不会反映到原始更改。

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!
于 2013-10-24T07:42:33.327 回答
0

恕我直言,这是一个奇怪的函数原型,但这意味着(Update) Map 函数接受对 void 指针的引用作为参数。

所以我认为,它相当于声明这样的函数:

 int32 Map(void** pMemoryPointer)
于 2013-10-24T07:42:35.363 回答