簡體   English   中英

void **相當於void * return?

[英]void ** equivalent to void * return?

    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],因為它返回void **

編號p2是對齊內存的地址,因此該函數應該返回。 在函數內,它被重新解釋為void** ,以便在對齊的內存之前存儲原始地址; 據推測,這可以通過釋放內存的相應函數來回讀。 在函數外部,它不被解釋為指向任何特定類型 - 由調用者決定使用對齊內存的內容。

你可以退貨。 但我懷疑它是否按預期工作。

至少,你不能簡單地free()它; 你必須有一個單獨的功能。

然而,它會起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM