[英]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.