我正在学习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;
}
我不想继续为每个对象写相同的行。有办法吗?
答案 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);
}