在Visual Studio 2015中警告C4477

Ado*_*aim 1 c warnings visual-studio-2012

当我编译以下代码时,Visual studio显示C4477的警告.为什么这个警告由visual studio产生?我该如何修复此代码?

警告:警告C4477:'printf':格式字符串'%d'需要类型为'int'的参数,但是variadic参数1的类型为'int*'

#include <stdio.h>

int main(void) {
    int num = 0;
    int *pi = &num;

    printf("Address of num: %d Value: %d\n", &num, num);
    printf("Address of pi: %d Value: %d\n", &pi, pi);

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

P.P*_*.P. 7

因为您使用的格式说明符不正确.%d是打印一个int.要打印指针,请使用%p并转换为void*:

printf("Address of num: %p Value: %d\n", (void*)&num, num);
printf("Address of pi: %p Value: %p\n", (void*)&pi, (void*)pi);
Run Code Online (Sandbox Code Playgroud)

到演员void*,因为可变参数功能不从做任何类型的转换需要type *void *按要求%p.引用标准:

7.21.6格式化输入/输出功能(C11草案)

p参数应该是指向void的指针.指针的值以实现定义的方式转换为打印字符序列.