gpt4 book ai didi

c - 如何设置其父结构类型的函数指针的参数

转载 作者:行者123 更新时间:2023-11-30 14:55:15 25 4
gpt4 key购买 nike

我尝试将函数指针定义为结构体的成员,它可以访问和修改结构体的其他参数(就像OOP中类的函数)。
为此,我有一个带有两个函数指针的结构:

    typedef struct{
int a;
int b;
int (*init)(); // line 4
int (*multiply)(); // line 5
}STR_X2;

其中函数指针定义如下:

void init(STR_X2* self , int _a , int _b){
self->a = _a;
self->b = _b;
printf("Init a:%d, b:%d \n",self->a,self->b);
}
int multiply(STR_X2* self){
printf("Multiply a:%d, b:%d, res:%d\n",self->a,self->b,self->a*self->b);
return self->a*self->b;
}

然后我在 main() 函数中使用结构,如下所示:

    int main(void) {
STR_X2* val2;
val2->init = init;
val2->multiply = multiply;

val2->init(val2,7,5);
printf("result:%d\n",val2->multiply(val2));

return EXIT_SUCCESS;
}

两个函数指针都有一个 STR_X2 类型的参数。但从逻辑上讲,我无法定义此参数,因为结构 STR_X2 未在第 4 行和第 5 行定义。
我的问题:
这种定义函数指针(不带参数)的方式安全吗? ?
是否有更好的替代方法来访问此类函数指针中的结构成员?

最佳答案

基本上,您想要的是结构类型的前向声明。您可以通过使用结构标签来实现这一点。例如:

typedef struct STR_X2_S STR_X2;

struct STR_X2_S {
int a;
int b;
int (*init)(STR_X2 *self, int _a, int _b);
int (*multiply)(STR_X2 *self);
};

关于c - 如何设置其父结构类型的函数指针的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46098033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com