簡體   English   中英

我可以將void *指針分配給char *指針嗎?

[英]Can I assign void* pointer to char* pointer?

我正在編寫重新實現malloc函數的代碼。 我看到一個人的示例代碼,其中包含一些奇怪的代碼,例如:

struct s_block{
   size_t size;    // size per block
   int free;       // whether free flag exist
   t_block pre;
   t_block next;
   void *magic_ptr;
   int padding;    // bytes for padding
   char data[1];   // first byte of data, i.e. the address returned from malloc
};

typedef struct s_block *t_block;
t_block get_block(void *p) {
   char *tmp;  
   tmp = p;
   ...
}

但我使用gcc或g ++編譯此代碼,錯誤是“無法使用void *指針指向char *指針”。 我想知道問題出在哪里? gcc還是g ++? 代碼是錯誤的?

在C ++中,您必須顯式將void*為另一種類型:

char *tmp = static_cast<char*>(p);

在C中不是這種情況,您可以將void*分配給任何指針類型而無需強制轉換。

您必須使用顯式強制轉換將void*強制轉換為任何其他指針,而其他方式是隱式的。

char* temp = static_cast<char*> (p);

這里要注意的一件事是您的初始指針(當前由void *表示)應為char *類型,以避免出現任何問題。

那是有效的C代碼,您收到的錯誤來自(更嚴格的)C ++標准。 如果要在C ++中進行編譯,只需將指針顯式轉換為char *

暫無
暫無

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

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