#include <stdio.h>
int main()
{
int year;
printf("enter year:");
scanf("%d", &year);
if (year % 4 == 0) {
printf("%d is a leap year :", &year);
}
else if (year % 100 == 0) {
printf("%d is a leap year :", &year);
}
else if (year % 400 == 0) {
printf("%d is a leap year :", &year);
}
else {
printf("%d is not a leap year", &year);
}
return 0;
}
为什么我会收到此错误:
format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘int *’
您的代码的意图似乎是:
在内存中分配一个
int
。它的名字是year
。它驻留在一个称为 &year
的地址,它是 int *
,或指向 int 的指针。
scanf
将确定年份的值。您传递 year
的 地址,以便
scanf
知道您想要将值存储在哪里。
现在,完成此操作后,值位于
year
,这是一个int
。但是你用 printf("%d is a leap year :",&year)
来调用 &year
,这是指向 int 或 int *
的指针。
这正是消息所述的内容。我希望这能帮助您将来解释此类消息,因为它们永远不会真正停止......
scanf
和printf
功能之间存在显着差异:
scanf
需要一个指向对象的指针(这就是为什么当你想要 &
一个 scanf
并将其放置在具有 int
类型的变量中时需要使用 int
),因为它修改传递给 scanf
函数的指针所引用的对象printf
只想知道参数的value,因为它不会修改它。所以你不使用引用(地址)&
运算符