【问题标题】:Format specifier int * warning message格式说明符 int * 警告消息
【发布时间】:2018-10-30 18:15:15
【问题描述】:

我用 scanf 和 printf 编写了简单的 C 程序,例如:

    int n;
    scanf("%d", &n);
    int result = 7 - n;
    printf("%d", &result);

并收到此警告消息:

警告:格式“%d”需要“int”类型的参数,但参数 2 有类型'int *' [-Wformat=] printf("%d", &result);

我不明白为什么参数 2 的类型是 int * 而不是 int?我该如何解决这个问题?

【问题讨论】:

  • 你只是给它结果,而不是结果的地址。
  • 警告信息说明一切必要。在此处发布之前,请阅读 printf 的手册和手册。

标签: c pointers format-specifiers


【解决方案1】:

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 指出,我忘了补充这一点。

【讨论】:

  • 如果你想打印result的地址,你应该把它转换成void*(void*)&result
猜你喜欢
  • 1970-01-01
  • 2018-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-31
  • 2021-09-06
相关资源
最近更新 更多