我正在尝试创建一个具有函数指针的结构。该函数指针指向一个函数,该函数接受所述结构的指针。这是一个真正的鸡蛋或鸡蛋问题,因为原型需要知道结构和结构需要了解原型。有没有办法预定义结构?我是C的新手,所以如果有人有任何见解我会非常感激。
谢谢, -devnull
#include <stdio.h>
/* predefine struct person? */
void printInfo(struct person *);
struct person{
char *name;
int age;
const void *pf = printInfo;
};
int main(){
struct person master = {"Master", 23};
return 0;
}
void printInfo(struct person *p){
printf("Name:\t%s\n", p->name);
}
答案 0 :(得分:1)
struct person;
typedef void (*fp)(struct person*);
struct person {
char * name;
fp fptr;
};
void afunc( struct person * p ) {
// stuff
}
int main() {
struct person p = { "fred", afunc };
}
答案 1 :(得分:1)
您可以在函数前添加struct person;
,但据我所知,您无法在struct person中分配函数,
#include <stdio.h>
struct person;
typedef void (FUNCTYPE)(struct person *);
void printInfo(struct person *);
struct person{
char *name;
int age;
FUNCTYPE *pf;
};
int main(){
struct person master = {"Master", 23, printInfo};
(master.pf)(&master);
return 0;
}
void printInfo(struct person *p){
printf("Name:\t%s\n", p->name);
}
上面的示例打印Name: Master
答案 2 :(得分:0)
我要添加的唯一内容是所有结构指针具有相同的宽度和对齐(6.2.5 / 27(C99标准)),因此您实际上不需要结构的正向定义。