警告:格式'%p'需要'void*'类型的参数,但参数3的类型为'char**'

use*_*456 4 c pointers

我正试图argv在我的代码中打印出此时的值,但是当我尝试编译它时,我得到了 warning: format ‘%p’ expects argument of type ‘void *’, but argument 3 has type ‘char **.我不确定这个警告意味着什么.是%p不是要用于argv即使它是一个指针?

int main(int argc, char* argv[])
{
    printf("%s%p", "argv = ", argv);
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*ler 9

那么你为什么不施展呢?

printf("argv = %p\n", (void *)argv);`
Run Code Online (Sandbox Code Playgroud)

%p指针被指定(POSIX printf(); C11 §7.21.6.1的fprintf功能):

p- 参数应该是指针void.指针的值以实现定义的方式转换为打印字符序列.

由于char **不是a void *,您需要进行显式转换.编译器不被标准所允许做转换到void *你-在声明中省略符号printf()出现的默认参数促销手段,但只影响float小于类型和整数类型int(short,char,等).

在这些天的大多数机器上,这是一个无操作.在我学会用C语言编程的(长期过时)机器上,还void *没有(对于标准来说太旧了),但等价物是char *,并且char *给定内存位置的地址值与指针值不同对于任何其他类型 - 演员表不是可选的.

请注意,我假设您打算打印地址的值.如果您打算打印内容,那么还有更多工作要做.