🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀
目录
🏡前言
c语言提供了内置类型,如char,short,int,long,long long,float,double类型。显然这些简单的类型不能表示复杂的情况,为了表示复杂对象C语言就引进了新的类型即结构体类型。
🐰结构体的基础知识
结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。
🐰结构体的声明
1. struct tag//tag类型名 2. { 3. member-list;//成员列表 4. 5. }variable-list;//变量列表
例如:
1. struct book 2. { 3. char name[20]; 4. int price; 5. }b3,b4;//全局变量 6. int main() 7. { 8. struct book b1;//局部变量 9. struct book b2;//局部变量 10. }
typedef重定义定义结构体
1. struct book 2. { 3. char name[20]; 4. int price; 5. }Book;//这里是类型不是变量,注意与上面的b3,b4的区别 6. int main() 7. { 8. Book b1;//局部变量 9. Book b2;//局部变量 10. }
🐰结构成员类型
结构的成员可以是标量、数组、指针,甚至其他结构体
🐰结构体变量的定义和初始化
1. struct book 2. { 3. char name[20]; 4. int price; 5. }b3,b4;//全局变量 6. int main() 7. { 8. struct book b1={"c语言",45};//局部变量 9. struct book b2={"数据结构",55};//局部变量 10. //不按顺序初始化 11. struct book b1={.price=45,.name="c语言"};//局部变量 12. struct book b2={.price=55,.name="数据结构"};//局部变量 13. }
🐰结构体成员访问
1. struct book 2. { 3. char name[20]; 4. int price; 5. }b3,b4;//全局变量 6. void Print(struct book* p) 7. { 8. printf("%s %d",p->name,p->price); 9. } 10. int main() 11. { 12. struct book b1={"c语言",45};//局部变量 13. struct book b2={"数据结构",55};//局部变量 14. //不按顺序初始化 15. struct book b1={.price=45,.name="c语言"};//局部变量 16. struct book b2={.price=55,.name="数据结构"};//局部变量 17. 18. //结构体.结构体变量 19. printf("%s %d",b1.name,b1.price); 20. printf("%s %d",b2.name,b2.price); 21. //结构体指针->结构体变量 22. Print(&b1); 23. }
🐰结构体传参
传值调用:
1. struct book 2. { 3. char name[20]; 4. int price; 5. }; 6. void Print(struct book bb1) 7. { 8. printf("%s %d\n",bb1.name,bb1.price); 9. } 10. int main() 11. { 12. struct book b1;//局部变量 13. Print(b1); 14. }
传址调用:
1. struct book 2. { 3. char name[20]; 4. int price; 5. }; 6. void Print(struct book* bb1) 7. { 8. printf("%s %d\n",bb1->name,bb1->price); 9. } 10. int main() 11. { 12. struct book b1;//局部变量 13. Print(&b1); 14. }
这里看出来,传址的效率更高,因为函数传参的时候是需要压栈的。如果传递一个结构对象的时候,结构体对象的时候,结构体过大,参数压栈的系统开销比较大,所以导致性能下降。
总结:
结构体传参的时候,要传结构体的地址🌸🌸🌸如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! 🌸🌸🌸