指针在printf()中不起作用

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

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

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

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

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

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

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

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

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

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

警告是好的,因为在奇怪的实现中, int*void*可能具有不同的大小或位模式等。

使用强制转换将int*转换为void*

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

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

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

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

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

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