结构体指针初始化问题
#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};这样初始化???
[解决办法]
这个指针是指向字符串常量内存的,这个内存是只读的
你试下str[1] = ‘a';可以吗
一般指针分配内存是在堆里面,如果没有分配内存就不能够赋值
[解决办法]
你见过int *p = 2;这样的写法吗?
一般指针是不允许用常量赋值的
[解决办法]
关键是 {} 这个符号
{} 只能在定义并初始化结构体的时候使用
"hello world" 能放在程序的任何地方。
{结构体} 就不行了
[解决办法]
内存分配问题,结构体不能如此初始化。