【发布时间】:2014-02-07 20:41:28
【问题描述】:
我有一个我不明白的错误代码:
format %d expects type int, but argument 2 has type int *
我不知道int 和int * 之间的区别。我不知道int有不同的类型,也找不到关于printf和scanf关键字母的网页。
代码如下:
#include <stdio.h>
#include <math.h>
int main(void)
{
int X = 0, Y = 0, A = 0, D = 0;
printf("This program computes the area of a rectangle ");
printf("and its diagonal length.");
printf("Enter Side 1 dimentions: ");
scanf("%d", &X);
printf("Enter Side 2 dimentions: ");
scanf("%d", &Y);
/* Calc */
A = X * Y;
D = pow(X,2) + pow(Y,2);
D = pow(D, 1 / 2);
/* Output */
printf("Rectangle Area is %d sq. units.", &A);
printf(" Diagonal length is %d.", &D);
return 0;
}
错误引用了最后两个 printf:
printf("Rectangle Area is %d sq. units.", &A);
printf(" Diagonal length is %d.", &D);
此外,这个程序最初是使用浮点数编写的(将 X、Y、A 和 D 声明为浮点数并使用 %f)。但这给出了一个更奇怪的错误代码:
format %f 需要 double 类型,但参数 2 的类型为 float *
我知道 %f 用于双精度和浮点数,所以我不明白为什么会出现这个错误。在我得到关于浮点数/双精度的错误代码后,我尝试将所有内容更改为 int(如上面的代码所示),只是为了检查。但是这在这篇文章的顶部提供了错误代码,我也不明白。
我一直在使用 gcc 编译器。 有人会解释做错了什么吗?
【问题讨论】:
-
第一个错误包括
int和int *类型,而不是int和int... -
int是整数类型。int*是指针类型。int类型的对象包含一个整数值。int*类型的对象包含int类型的某个对象的地址(或不指向任何内容的空指针)。 -
当您复制并粘贴错误消息时,一些非 ASCII 字符被错误地呈现(可能某些转换被错误地执行了两次)。我已经清理了一下。
标签: c