指针在printf()中不起作用

Chr*_*ris 31 c printf pointers

打印指针时遇到问题.每次我尝试编译下面的程序时,我都会收到以下错误:

pointers.c:11: warning: format ‘%p’ expects type ‘void *’, but argument 2 has type ‘int *’
Run Code Online (Sandbox Code Playgroud)

我显然在这里遗漏了一些简单的东西,但是从我见过的类似代码的其他考试中,这应该是有效的.

这是代码,任何帮助都会很棒!

#include <stdio.h>

    int main(void)
    {
       int x = 99;
       int *pt1;

       pt1 = &x;

       printf("Value at p1: %d\n", *pt1);
       printf("Address of p1: %p\n", pt1);

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

Mac*_*ade 46

只需将int指针转换为void one:

printf( "Address of p1: %p\n", ( void * )pt1 );
Run Code Online (Sandbox Code Playgroud)

您的代码是安全的,但您正在使用-Wformat警告标志进行编译,该类型将检查对printf()和的调用scanf().


pmg*_*pmg 10

请注意,您会收到一个简单的警告.您的代码可能会按预期执行.

"%p"printf 的转换说明符需要一个void*参数; pt1是类型的int*.

该警告是好的,因为int*void*可能,在陌生的实现,有不同尺寸或位模式或东西.

使用强制转换转换int*为a void*...

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

...即使在奇怪的实施上,一切都会好的.