首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >警告:格式‘’%d‘期望’int‘类型的参数,但参数2有’int*‘类型

警告:格式‘’%d‘期望’int‘类型的参数,但参数2有’int*‘类型
EN

Stack Overflow用户
提问于 2014-12-12 23:01:33
回答 5查看 9.1K关注 0票数 0

我很困惑为什么这会抛出错误warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘int *’

代码语言:javascript
运行
复制
int x = 5;
int **y = &x;
printf("%d", y);

在这行得通吗?

代码语言:javascript
运行
复制
int x = 5;
int *y = &x;
printf("%d", *y);
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-12-12 23:07:52

因为您在第二个版本中将y声明为指向整数的指针,所以编译器会有一种温暖而模糊的感觉,认为*y是一个有效的整数。

在第一个版本中,y被声明为一个指向整数指针的指针(无论如何,我总是这样想它),所以*y应该解析为一个整数指针,而不是整数--编译器警告您,它可能与printf中的%d不对齐。

感谢@KierBorromeo在我身上发现了一个愚蠢的错误。

票数 0
EN

Stack Overflow用户

发布于 2014-12-12 23:08:31

我认为第一个版本的问题是:y的类型是指向指向整数的指针的指针,而&x是一个地址,可以看作是,一个指向整数的指针。很明显存在着不匹配的现象。

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

票数 1
EN

Stack Overflow用户

发布于 2014-12-12 23:20:18

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

代码语言:javascript
运行
复制
int x = 5;
int *y = &x;
printf("%d", y); // <-- y is an int* - ERROR

代码语言:javascript
运行
复制
int x = 5;
int *y = &x;
printf("%d", *y); // <-- y is an int*, so *y is an int - OK
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27453461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档