0

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

}
4

3 回答 3

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 };
}
于 2011-05-05T09:16:37.420 回答
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

于 2011-05-05T09:18:28.980 回答
0

我唯一要补充的是所有结构指针都具有相同的宽度和对齐方式(6.2.5/27(C99 标准)),因此您实际上不需要结构的前向定义。

于 2011-05-05T09:44:18.677 回答