## 结构体嵌套定义 - 成员也可以又是一个结构,即构成了嵌套的结构 ```c struct Date{ int month; int day; int year; } struct stu{ int num; char *name; char sex; struct Date birthday; Float score; } ``` - 在stu中嵌套存储Date结构体内容 ![](https://img-blog.csdnimg.cn/img_convert/de4aedd768012888dc7b2e70a744c86d.png) >+ 注意: >+ 结构体不可以嵌套自己变量,可以嵌套指向自己这种类型的指针 > >```c >struct Student { > int age; > struct Student stu; >}; >``` - 对嵌套结构体成员的访问 + 如果某个成员也是结构体变量,可以连续使用成员运算符"."访问最低一级成员 ```c struct Date { int year; int month; int day; }; struct Student { char *name; struct Date birthday; }; struct Student stu; stu.birthday.year = 1986; stu.birthday.month = 9; stu.birthday.day = 10; ``` --- ## 结构体和函数 - 结构体虽然是构造类型, 但是结构体之间赋值是值拷贝, 而不是地址传递 ```c struct Person{ char *name; int age; }; struct Person p1 = {"lnj", 35}; struct Person p2; p2 = p1; p2.name = "zs"; // 修改p2不会影响p1 printf("p1.name = %s\n", p1.name); // lnj printf("p2.name = %s\n", p2.name); // zs ``` - 所以结构体变量作为函数形参时也是值传递, 在函数内修改形参, 不会影响外界实参 ```c #include struct Person{ char *name; int age; }; void test(struct Person per); int main() { struct Person p1 = {"lnj", 35}; printf("p1.name = %s\n", p1.name); // lnj test(p1); printf("p1.name = %s\n", p1.name); // lnj return 0; } void test(struct Person per){ per.name = "zs"; } ``` ## 最后,如果有任何疑问,请加微信 **leader_fengy** 拉你进学习交流群。 开源不易,码字不易,如果觉得有价值,欢迎分享支持。