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)
...即使在奇怪的实施上,一切都会好的.