[英]C: Why aren't &(void *) and void** compatible?
雖然我的代碼正常運行,但我收到了一個不兼容的指針類型錯誤警告。 首先,這是我的代碼的簡化版本:
typedef struct {
int field1;
int field2;
} my_struct;
void some_function(void **data){
// do something with *data
}
int main(int argc, char *argv[]){
my_struct *ptr = malloc(sizeof(my_struct));
ptr->field1 = 5;
ptr->field2 = 17;
some_function(&ptr);
}
my_struct
類型是一個示例,但我實際上使用了多個類型,因此some_func
必須接受void**
,而不是my_struct**
。 每次我以上述方式調用some_func
時,都會收到以下警告,但我的代碼功能正常。
warning: passing argument 1 of ‘my_func’ from incompatible pointer type
我不確定為什么這些類型不兼容,並希望以某種方式刪除警告。 要獲得答案,請隨時解釋為什么會發生這種情況,如果可能的話,如何刪除警告(可能是cpp指令?)。 謝謝!
使用void *
參數類型。
void **
不是通用指針類型。 void *
是。
void*
表示(有效地)“指向無類型內存區域的指針”。
void**
表示(有效地)“指向內存區域的指針,其中包含指向無類型內存區域的指針”。
注意中間的塊有一個類型 - 一個void*
數組。 你有效地傳遞了一個mystruct*
數組,這是一個不同的類型。 所以你的編譯器警告你。
嘗試將Derived**
轉換為Base**
時,C ++中也會出現類似的問題 。 但它也適用於C語言。 ( void*
操作類似於所有指針類型的“基類”)考慮一段這樣的代碼:
void does_things(void** outParameter)
{
*outParameter = malloc(42); // Looks fine; writing void* to void* :)
}
int main()
{
my_struct* x = /*...*/;
does_things(&myStruct); // Ut oh, tries to make x point to
// something that is *not* a my_struct
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.