格式说明符 int * 警告消息
Format specifier int * warning message
我用 scanf 和 printf 编写了简单的 C 程序,例如:
int n;
scanf("%d", &n);
int result = 7 - n;
printf("%d", &result);
并收到此警告消息:
warning: format '%d' expects argument of type 'int', but argument 2
has type 'int *' [-Wformat=]
printf("%d", &result);
我不明白为什么参数 2 的类型是 int * 而不是 int?我该如何解决?
result
是整型变量。如果你想打印它的值然后使用 %d
格式说明符 & 只提供参数 result
而不是 &result
.
这个
printf("%d", &result);
替换为
printf("%d", result);
如果要打印 result
变量的地址,请使用 %p
格式说明符。
printf("%p", &result); /* printing address */
编辑: %p
格式说明符需要一个 void*
类型的参数。
因此要打印 result
的地址,请将其转换为 void*
。例如
printf("%p", (void*)&result); /* explicitly type casting to void* means it works in all cases */
感谢@ajay 指出,我忘了补充这一点。
我用 scanf 和 printf 编写了简单的 C 程序,例如:
int n;
scanf("%d", &n);
int result = 7 - n;
printf("%d", &result);
并收到此警告消息:
warning: format '%d' expects argument of type 'int', but argument 2 has type 'int *' [-Wformat=] printf("%d", &result);
我不明白为什么参数 2 的类型是 int * 而不是 int?我该如何解决?
result
是整型变量。如果你想打印它的值然后使用 %d
格式说明符 & 只提供参数 result
而不是 &result
.
这个
printf("%d", &result);
替换为
printf("%d", result);
如果要打印 result
变量的地址,请使用 %p
格式说明符。
printf("%p", &result); /* printing address */
编辑: %p
格式说明符需要一个 void*
类型的参数。
因此要打印 result
的地址,请将其转换为 void*
。例如
printf("%p", (void*)&result); /* explicitly type casting to void* means it works in all cases */
感谢@ajay 指出,我忘了补充这一点。