如何使用返回int指针的函数数组

时间:2014-04-23 21:32:48

标签: c arrays xcode function pointers

当我尝试编译以下行时

int* x[](), (*y)();

我得到错误" x声明为int()"

类型的函数数组

3 个答案:

答案 0 :(得分:3)

你不能真正声明一个函数数组,但你可以有一个函数指针数组,这可能会给你相同的效果,因为你可以调用它们而无需显式解除引用。

以下将声明一个返回5的{​​{1}}函数指针数组。

int*

网站cdecl将让您使用各种指针声明来查看它们在英语中的含义。

以下是黄金法则,用于阅读从old article偷来的C声明。

  

从变量名称开始(如果没有标识符,则从最内层构造开始)   当下。向右看而不跳过右括号;说什么   你看。再看左边而不跳过括号;说什么   你看。如果有的话,跳出一个括号级别。向右看;说什么   你看。看左边;说出你所看到的。以这种方式继续,直到   你说变量类型或返回类型。

当应用于上述声明时,我们说:

  • x是一个包含5个指向函数的数组,返回指向int的函数。

正如SteveCox在下面正确评论的那样,我们注意到如果我们在遵循上述规则时遇到左侧的类型限定符,它将描述其左侧而不是右侧的类型。例如,以下声明声明了一个包含5个指针的数组,这些指针返回 const指向int 的指针,而不是指向const int的指针

int* (*x[5])();

答案 1 :(得分:1)

尝试使用2个函数指针的数组。

#include <stdio.h>
int *first(void) { return NULL; }
int *second(void) { return NULL; }
int main(void) {
    int *(*fx[2])(void);
    fx[0] = first;
    fx[1] = second;
    /* ... */
    if (fx[0]() == fx[1]()) {
        printf("Calling both functions returns the same value.\n");
    }
    return 0;
}

答案 2 :(得分:0)

实际应用可能如下所示:

#include <ansi_c.h>

int add_(int, int);
int sub_(int, int);
int mul_(int, int);
int div_(int, int);

enum    {
    ADD,
    SUB,
    MUL,
    DIV
};

int (*mathOps[4])(int, int);

int main(void)
{
    int i;
    mathOps[ADD]=add_;
    mathOps[SUB]=sub_;
    mathOps[MUL]=mul_;
    mathOps[DIV]=div_;

    for(i=ADD;i<=DIV;i++)
    {
        printf("results are: %d\n", mathOps[i](3, 3));  
    }

    getchar();
    return 0;   
}

int add_(int a, int b)
{
    return a + b;   
}
int sub_(int a, int b)
{
    return a - b;   
}
int mul_(int a, int b)
{
    return a * b;   
}
int div_(int a, int b)
{
    return a / b;   
}