void **相当于void * return?

时间:2014-01-14 07:17:13

标签: c++ c

    void * alligned_malloc(size_t bytes , uint16_t allign)
{

    uint16_t offset = allign - 1 + sizeof(void*);

    void* p1 = malloc(offset + bytes);
    void**p2 = (void**)(((size_t)p1+offset) & ~(allign - 1));
    p2[-1] = p1;

    return p2; // Why is this correct ? should not the return be p2[0] as it is     returning void**

}

请帮我理解这个修改过的malloc怎么是void **相当于void *在这段代码中返回?

4 个答案:

答案 0 :(得分:6)

任何类型的指针都可以隐式转换为void *,包括指向void *的指针,即void **

答案 1 :(得分:5)

void*可以指向任何,包括另一个指针。

答案 2 :(得分:3)

  

此代码中void**等同于void *的返回方式是什么?

任何指针类型都可以转换为void*

  

不应该返回p2 [0],因为它返回void **

没有。 p2是对齐内存的地址,因此函数应该返回。在函数内,它被重新解释为void**,以便在对齐的内存之前存储原始地址;据推测,这可以通过释放内存的相应函数来回读。在函数之外,它不会被解释为指向任何特定类型 - 由调用者决定使用对齐内存的内容。

答案 3 :(得分:2)

你可以退货。但我怀疑它是否按预期工作。

至少,你不能简单地free()它;你必须有一个单独的功能。

然而,它会起作用。