Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 警告:格式‘;%d’;应为类型为‘;int’;,但参数2的类型为‘;int*’;_C - Fatal编程技术网

C 警告:格式‘;%d’;应为类型为‘;int’;,但参数2的类型为‘;int*’;

C 警告:格式‘;%d’;应为类型为‘;int’;,但参数2的类型为‘;int*’;,c,C,我不明白为什么会抛出错误警告:格式“%d”要求参数类型为“int”,但参数2的类型为“int*”: int x = 5; int **y = &x; printf("%d", y); 这样做有效吗 int x = 5; int *y = &x; printf("%d", *y); 因为您在第二个版本中将y声明为指向整数的指针,所以编译器会感觉到*y是一个有效的整数 在第一个版本中,y被声明为指向整数指针的指针(不管怎样,我总是这么想的),因此*y应该解析为整数指针,而不是整数

我不明白为什么会抛出错误
警告:格式“%d”要求参数类型为“int”,但参数2的类型为“int*”

int x = 5;
int **y = &x;
printf("%d", y);
这样做有效吗

int x = 5;
int *y = &x;
printf("%d", *y);

因为您在第二个版本中将
y
声明为指向整数的指针,所以编译器会感觉到
*y
是一个有效的整数

在第一个版本中,
y
被声明为指向整数指针的指针(不管怎样,我总是这么想的),因此
*y
应该解析为整数指针,而不是整数指针-编译器警告您,它可能与
printf
中的
%d
不一致


编辑感谢@Kierboromeo发现了我的一个愚蠢的打字错误。

因为您将
y
定义为指向int的指针,所以您可以将指向int的指针的地址存储在
y
上,但是你要做的是存储
int
的地址,我认为第一个版本的问题是:
y
的类型是指向整数的指针,而
&x
是指向整数的指针。显然存在着不匹配


在第二个版本中,
y
的类型是一个指向整数的指针
,因此程序在编译时没有警告。

错误是不言自明的。您正在传递一个
int*
,其中需要一个
int

int x = 5;
int *y = &x;
printf("%d", y); // <-- y is an int* - ERROR
intx=5;
int*y=&x;

printf(“%d”,y);// 这是因为在您的代码中,x是一个整数,*y是指向整数的指针,因此**y是指向指向整数的指针的指针。这就像说
*y=&&x

在第一个示例中,您是指
int*y
而不是
int**y
?两者都不正确;第一个是@psmears所说的,第二个是因为
%d
是整数;
int*
不是整数。使用
%p
。我建议避免使用“双指针”;它也意味着
double*
。感谢您的更正,我没有这样想过。它是
int**y=&x如果我没有弄错的话,这是OP代码中的一个输入错误
x
是一个
int
&x
是一个
int*
,但是
int*
不能分配给
int**
,所以
y
必须是一个
int*
而不是
int**
&d
应该是打字吗,先生?@KierBorromeo确实是的,谢谢你抓到了。
int x = 5;
int *y = &x;
printf("%d", *y); // <-- y is an int*, so *y is an int - OK