#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};这样初始化???