gpt4 book ai didi

c - 函数指针 - 存储和使用

转载 作者:太空狗 更新时间:2023-10-29 15:17:45 25 4
gpt4 key购买 nike

我有一个链表,其中每个元素都可以包含

typedef struct elem {
struct elem *next;
void *data;
} *elem;

现在,假设我有一个方法...

void blah(int random) {
printf("testing\n");
}

然后我将它存储在我的列表中...

elem lst = (elem) malloc(sizeof(elem));
lst->next = NULL;
lst->data = &blah;

我现在如何通过从我的链表中获取方法来调用它?
另外,我是否正确地将函数存储在我的链表中?

最佳答案

更好:

typedef void (*blah_ptr)(int);
...
typedef struct elem {
struct elem *next;
blah_ptr data;
} *elem;
...
lst->data = blah;

一个完整的例子可能会有所帮助:

#include <stdio.h>

typedef void (*blah_ptr)(int);

typedef struct elem {
struct elem *next;
blah_ptr data;
} *elem;

void blah (int random) {
printf ("We're in blah: random=%d...\n", random);
}

void bleep (int nonrandom) {
printf ("We're in bleep: nonrandom=%d...\n", nonrandom);
}

int
main (int argc, char *argv[]) {

struct elem lst[2];

lst[0].next = &lst[1];
lst[0].data = blah;
lst[1].next = NULL;
lst[1].data = bleep;

lst[0].data(10);
lst[1].data(20);

return 0;
}

这是输出:

We're in blah: random=10...
We're in bleep: nonrandom=20...

关于c - 函数指针 - 存储和使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25819115/

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