无效 ** 等同于无效 * 返回

void ** equivalent to void * return?

本文关键字:无效 返回 等同于      更新时间:2023-10-16
    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 * 返回?

任何类型的

指针都可以隐式转换为void *,包括指向void *的指针,又名void **

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

void**如何等同于此代码中的void *返回?

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

返回

不应该是 p2[0],因为它返回无效**

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

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

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

但是,然后它将起作用。