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 に答える