C: 为什么 &(void *) 和 void** 不兼容?

标签 c pointers incompatibility

尽管我的代码运行正常,但我收到了不兼容的指针类型错误警告。首先,这是我的代码的简化版本:

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**,而不是我的结构**。每次我以上述方式调用 some_func 时,我都会收到以下警告,但我的代码仍能正常运行。

warning: passing argument 1 of ‘my_func’ from incompatible pointer type

我不确定为什么这些类型不兼容,并且想以某种方式删除警告。对于答案,请随意解释为什么会发生这种情况,如果可能的话,如何删除警告(也许是 cpp 指令?)。谢谢!

最佳答案

使用 void * 参数类型。

void ** 不是通用指针类型。 void * 是。

关于C: 为什么 &(void *) 和 void** 不兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20753213/

相关文章:

c++ - 在 C++ 中正确地将 `void*` 转换为整数

c - while ( *(mychar++)) 什么时候停止

Java 方法适用于 1.5 但不适用于 1.6

c - 使用 ffmpeg 进行 aac 编码会产生超短文件

c - 处理/定义 poll 系统调用的 struct pollfd 数组的有效方法

c - 为什么 $$ 不接受类型 char

windows - 64 位 Windows 上的 16 位程序集?

java - 如何通过NAT通过公网IP发送UDP数据包?

c - 如果用指针引用常量字符串,是否永久占用内存?

java - 如何修复 java.lang.UnsupportedClassVersionError : Unsupported major. 次要版本