在C中使用函数指针

时间:2014-08-31 02:16:09

标签: c struct function-pointers

我正在学习C中函数指针的概念,并想知道如何在结构中使用。

比如我说:

struct math{
    int a;
    int b;
    int (*ADD)(int, int);
    int (*subtract)(int, int);

};

int add(int a ,int b)
{
 return (a+b);
}

int main()
{
   math M1;
   M1.a = 1;
   M2.b = 2;
   M2.ADD =  add;
}

在此,函数指针ADD指向函数add。有没有办法编写一个类似于构造函数的函数,它会自动指向ADD添加?

所以如果写M1.construct()

它应该在那里

void construct()
{
    ADD = add;
}

我不想继续为每个对象写相同的行。有办法吗?

1 个答案:

答案 0 :(得分:2)

你能做的最好的事情就是提供这样的功能:

void math_construct(struct math *m, int a, int b)
{
    m->a = a;
    m->b = b;
    m->ADD = add;
}


int main()
{
    struct math m1;
    math_construct(&m1, 44, 55);
}

或者,您也可以提供为struct math分配内存的功能,但这需要您在不再需要时使用free()

struct math *math_new(int a, int b)
{
    struct math *result = malloc(sizeof *result);
    // check whether result is NULL before continuing
    result->a = a;
    result->b = b;
    result->ADD = add;
    return result;
}

int main()
{
    struct math *m1 = math_new(44, 55);
    // do something with m1
    free(m1);
}