指针在printf()中不起作用

时间:2011-03-24 10:48:38

标签: c pointers printf

打印指针时出现问题。每次我尝试编译下面的程序时都会出现以下错误:

pointers.c:11: warning: format ‘%p’ expects type ‘void *’, but argument 2 has type ‘int *’

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

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

#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;
    }

5 个答案:

答案 0 :(得分:44)

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

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

您的代码是安全的,但您正在使用-Wformat警告标记进行编译,该标记会键入检查对printf()scanf()的调用。

答案 1 :(得分:10)

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

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

警告很好,因为int*void*在奇怪的实现上可能有不同的大小或位模式或某些

使用演员......将int*转换为void*

printf("%p\n", (void*)pt1);

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

答案 2 :(得分:2)

在这种情况下,编译器对警告有点过分了。您的代码非常安全,您可以选择删除警告:

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

答案 3 :(得分:1)

消息说明了一切,但这只是一个警告而不是错误本身:

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

答案 4 :(得分:-1)

这对我来说很好:

printf("Pointer address: %p.", pxy);

除非您希望...

,否则无需将其转换为任何内容。

相关问题