传递给void**而不是void*会让编译器抱怨类型,为什么?

1 c void-pointers

我不明白为什么编译器警告我在这段代码中传递一个不兼容的指针类型:(在这种情况下,void *和之间有什么区别void **)(我不知道这是否有所不同,但我使用的是gnu99C版本)

void someFunc(void ** foo) {
    printf("%s\n", *foo);
}

int main() {

    char * text = "some text";
    someFunc(&text);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

而在这不是

void someFunc(void * foo) { 
    printf("%s\n", foo);
}

int main() {

    char * text = "some text";
    someFunc(text);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

提前致谢

小智 6

void *是一种可以隐式转换为任何对象指针类型的类型.void **是不是-所以当你可以指定一个char *void *,你可以没有做同样的char **void **.

原因是它们是不兼容的类型: char **指向a char *,void **指向a void *,因此它们的基类型不匹配.