【问题标题】:Too few arguments to function while setting a value in an array of pointers to functions在函数指针数组中设置值时,函数的参数太少
【发布时间】:2017-03-19 22:38:09
【问题描述】:

我试图用以下代码创建一个函数指针数组:

#include <stdio.h>

int functu(int ,int);
int ghonchu(int,int);

int main()
{
    printf("Hello, World!\n");

    int (*acrib[10]) (int,int);

    acrib[0] = (*functu)(int,int);
    return 0;
}

在编译这个程序时,会抛出一个错误,提示“函数 'functu' 的参数太少”。

可能是什么原因造成的?我错过了什么琐碎的事情吗?

【问题讨论】:

    标签: c pointers


    【解决方案1】:

    您似乎将&amp;(返回一个指针)与*(取消引用一个指针)混淆了。

    你需要改变这个:

       acrib[0] = (*functu)(int,int);
    

    到这里:

       acrib[0] = &functu;
    

    见:http://ideone.com/r1Xqa6

    【讨论】:

    • 明白了!非常感谢。
    • 问题仍然存在。对不起
    • @deadpoet:我添加了一个 Ideone.com 链接。
    • &amp; 完全是可选的;该代码可以与acrib[0] = functu; 一起正常工作。事实上,它也可以与acrib[0] = *functu; 甚至(恐怖的)acrib[0] = **functu; 一起使用——关键是缺少调用函数的左括号。就个人而言,我跳过了&amp;,但我理解使用它的愿望。在初始化函数指针时,我永远不会使用* 表示法,但我通常会写(*acrib[0])(10, 20); 而不是acrib[0](10, 20);,尽管这部分是因为当我学习C 时,后一种表示法不是一个选项。
    • @JonathanLeffler:这是一个很好的观点。我想说 OP 将声明函数指针的语法与引用函数指针的语法混淆了会更正确。
    【解决方案2】:

    你应该有函数实现,然后在使用它之前将实现分配给指针。 short example

    【讨论】:

    • 否;那没有必要。函数声明已经足够了。
    猜你喜欢
    • 2017-08-18
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 2018-03-07
    • 2017-05-29
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    相关资源
    最近更新 更多