警告:格式“%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]

格式指定类型“int*”但参数类型为“int”