gpt4 book ai didi

c - C中对象的函数指针

转载 作者:太空宇宙 更新时间:2023-11-03 23:52:39 25 4
gpt4 key购买 nike

typedef struct node{
int term;
struct node *next;
}node;
typedef void(*PTR )(void *);
typedef void(*PTR1)(void *,int,int);
typedef int(*PTR2)(void *,int);
typedef void(*PTR3)(void *,int);
typedef void(*PTR4)(void *,void *,void *);

typedef struct list{
node *front,*rear;
PTR3 INSERT;
PTR *MANY;
PTR DISPLAY,SORT,READ;
PTR4 MERGE;
}list;

void constructor(list **S)
{
(*S)=calloc(1,sizeof(list));
(*S)->front=(*S)->rear=NULL;
(*S)->INSERT=push_with_value;
(*S)->READ=read;
(*S)->SORT=sort;
(*S)->DISPLAY=display;
(*S)->MERGE=merger;

(*S)->MANY=calloc(2,sizeof(PTR));
(*S)->MANY[1]=read;


}
int main()
{
list *S1,*S2,*S3;
constructor(&S1);
constructor(&S2);
constructor(&S3);

S1->MANY[1](S1);
S1->SORT(S1);
S1->DISPLAY(S1);
return 0;
}

所有此类函数中的 void * 参数在函数内部被类型转换为 list *。有什么方法可以通过将 MANY[1] 更改为另一个名称(例如 READ_IT;)来调用 S1->READIT;

我打算创建一个通用头文件,以便我可以将它用于我的所有程序。由于我不知道我需要多少个函数指针,所以我打算为每个函数指针类型创建一个动态数组。

最佳答案

typedef struct list{
node *front,*rear;
PTR3 INSERT;
PTR READIT;
PTR DISPLAY,SORT,READ;
PTR4 MERGE;
}list;

...

(*S)->READIT = read;

...

S1->READIT(S1);

关于c - C中对象的函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15602250/

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