结构体指针初始化问题#include stdio.hstruct personchar *get_name(struct person *)int get_age(str
结构体指针初始化问题
#include <stdio.h> struct person; char *get_name(struct person *); int get_age(struct person *); struct person { char name[20]; int age; char *(*get_name)(struct person *); int (*get_age)(struct person *); };
char *get_name(struct person *p) { return p->name; }
int get_age(struct person *p) { return p->age; }
int main() { struct person person = {"huang",21,get_name,get_age}; struct person *p = &person; printf("Name: %s\n",p->get_name(p)); printf("Age : %d\n",p->get_age(p)); return 0; }
上面的代码运行正常,但是把 struct person person = {"huang",21,get_name,get_age}; struct person *p = &person; 替换成struct person *p = {"huang",21,get_name,get_age}; 编译gcc -o call call.c call.c: In function ‘main’: call.c:24: warning: initialization from incompatible pointer type call.c:24: warning: excess elements in scalar initializer call.c:24: warning: (near initialization for ‘p’) call.c:24: warning: excess elements in scalar initializer call.c:24: warning: (near initialization for ‘p’) call.c:24: warning: excess elements in scalar initializer call.c:24: warning: (near initialization for ‘p’) 运行时出现 段错误 结构体指针为什么不能struct person *p = {"huang",21,get_name,get_age};这样初始化??? [解决办法]