struct有一个函数指针,指向一个带有所述结构的指针的函数。需要预定义吗?

时间:2011-05-05 09:01:20

标签: c prototype struct member-function-pointers

我正在尝试创建一个具有函数指针的结构。该函数指针指向一个函数,该函数接受所述结构的指针。这是一个真正的鸡蛋或鸡蛋问题,因为原型需要知道结构和结构需要了解原型。有没有办法预定义结构?我是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);

}

3 个答案:

答案 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标准)),因此您实际上不需要结构的正向定义。