警告:格式“%d”需要类型“int”,但参数 2 的类型为“int (*)(int *)”[关闭]
Posted
技术标签:
【中文标题】警告:格式“%d”需要类型“int”,但参数 2 的类型为“int (*)(int *)”[关闭]【英文标题】:warning: format '%d' expects type 'int', but argument 2 has type 'int (*)(int *)' [closed] 【发布时间】:2019-08-25 02:18:20 【问题描述】:我尝试创建一个程序,在该程序中我主要声明一个数组并加载它的元素。 还有一个函数可以计算数组中元素的数量,但是当我想显示结果时,会出现内存地址而不是元素数量和上面的警告。
代码:
#include <stdio.h>
#include <conio.h>
int countArrayElement(int arr[]);
int main()
int intMyArray[]= 1,2,3,4,6,7;
countArrayElement(intMyArray);
printf("The quantity of elements in the array is %d",&countArrayElement);
getch();
return 0;
int countArrayElement(int arr[])
int count = 0;
count = sizeof (arr)/sizeof(int); // wont work at all, arr is just the first element
return count;
【问题讨论】:
printf("The quantity of elements in the array is %d",countArrayElement());
不要执行建议的更正
注意,你的函数中的sizeof( arr )
将给出int *
的大小(因为这是int arr[]
将解析的),不是 数组的大小。 sizeof
是编译时操作。
...除了可变长度数组,正如下面 chux 所指出的,但这不会改变事情——您不能在函数中以这种方式确定数组的大小。
【参考方案1】:
错误消息说明了一切。在格式字符串中,%d
表示一个整数值,而您给它一个指向函数的指针。您想将 print to 参数更改为实际上是函数调用的结果:
printf("The quantity of elements in the array is %d", countArrayElement(intsMyArray));
在 C 中检索数组中的number of elements 并不像其他语言那样简单。
【讨论】:
给我错误:需要左值作为一元'&'操作数 @AlejandroCaro 我更新了帖子 - 不要在print
调用的参数中包含与号。
做指定给我1
@AlejandroCaro 你看过我链接的帖子了吗?
@AlejandroCaro:见我上面的评论。正如预期的那样。将int[]
作为参数提供给函数只是提供int *
的一种奇特方式。考虑一下:您不想想要传递(因此,复制)整个数组...另外,sizeof
是一个编译-time 运算符,不是运行时函数!以上是关于警告:格式“%d”需要类型“int”,但参数 2 的类型为“int (*)(int *)”[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
C 语言:收到错误:警告:格式“%d”需要“int *”类型的参数,但参数 2 的类型为“int **”[-Wformat=]
格式“%d”需要“int”类型的参数,但参数 2 的类型为“int *”
警告:格式“%ld”需要“long int”类型的参数,但参数的类型为“__builtin_neon_di”
格式指定类型“int”,但参数的类型为“UIViewContentMode”
在 C 中,如何修复此警告:格式“%s”需要“char *”类型的参数,但参数 3 的类型为“char (*)[100]