带有函数指针数组的结构

时间:2015-03-28 11:29:25

标签: c

#include <stdio.h>

void getSum();
void getDifference();

typedef void (*functionPtr)();

// assign the function's address
functionPtr arrayFp[2] = {getSum, getDifference};

struct true {
    int a;
    int b;
    functionPtr arrayFp[2]; //syntax may be wrong 
} w = { 5, 6, arrayFp[0] };

int main() {
    w.arrayFp[0];    //syntax is wrong 
    return 0;
}

void getSum() {
    printf("I am the greatest");
}

void getDifference() {
    printf("I am not the greatest");
}

1 个答案:

答案 0 :(得分:2)

初始化结构时,您当前使用第一个函数指针而不是实际数组初始化数组。实际上,由于结构包含一个数组,您需要初始化数组的实际成员,或者将其更改为指针。

然后,当您想要调用它时,可以将函数指针用作普通函数。


所以对于结构,要么

struct
{
    int a;
    int b;
    functionPtr arrayFp[2];
} w = {
    5, 6, { getSum, getDifference }
};

struct
{
    int a;
    int b;
    functionPtr *arrayFp;
} w = {
    5, 6, arrayFp
};

注意:请勿使用符号true作为名称,因为如果您包含<stdbool.h>,则可能会对其进行定义。