/*
结构体的嵌套
结构体定义中,结构体的成员又是另外一个结构体的变量
注意:
1)结构体定义中可以嵌套其他结构体类型的变量,不可以嵌套自己这个类型的变量
2)可以嵌套自己类型的指针
*/
void demo(){
//定义一个Date的结构体
struct Time{
int hour;
int min;
int sec;
};
struct Date{
int year;
int month;
int day;
struct Time time;
};
//定义一个学生的结构体
struct Student{
char *name;
int age;
float score;
struct Date birthday;
//struct Student stu; //错误的
//struct Student *stu; //这是正确的
};
//1、嵌套的结构体进行初始化
struct Student stu1 = {"huguozhang胡",19,88.5f,{1986,2,18,{10,50,12}}};
//2、嵌套的结构体访问
printf("姓名:%s,年龄:%d(生日:%d-%02d-%02d),成绩:%.2f\n",stu1.name,stu1.age,stu1.birthday.year,stu1.birthday
.month,stu1.birthday.day,stu1.score);
printf("姓名:%s,年龄:%d(生日:%d-%02d-%02d %02d:%02d:%02d),成绩:%.2f\n",stu1.name,stu1.age,stu1.birthday.year,stu1.birthday
.month,stu1.birthday.day,stu1.birthday.time.hour,stu1.birthday.time.min,stu1.birthday.time.sec, stu1.score);
//3、结构体嵌套自身的指针
struct Person{
char *name;
int age;
//嵌套自己类型的指针
struct Person *child;
};
struct Person kim = {"kim",8,NULL};
struct Person p1 = {"林志颖",35,&kim};
//结构体嵌套自身指针的,访问
printf("%s的儿子是:%s,儿子的年龄:%d\n",p1.name,(*p1.child).name,(*p1.child).age);
printf("%s的儿子是:%s,儿子的年龄:%d\n",p1.name,p1.child->name,p1.child->age);
}