指针在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);