C游记|《C游记》 番外篇(贰)结构思维禅性稳 四众皆倡结构体


目录
(壹) 结构体的声明
1.1 结构体的基础知识
1.2 结构的声明
1.3 结构成员的类型
(贰) 结构体变量的定义和初始化
(叁) 结构体成员的访问
(肆) 结构体传参
?《C游记》 专栏 ?《小玄的C游之旅》
(壹) 结构体的声明 1.1 结构体的基础知识 结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。
在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
在实际项目中,结构体是大量存在的。研发人员常使用结构体来封装一些属性来组成新的类型。由于C语言内部程序比较简单,研发人员通常使用结构体创造新的“属性”,其目的是简化运算。
结构体在函数中的作用不是简便,其最主要的作用就是封装。封装的好处就是可以再次利用。让使用者不必关心这个是什么,只要根据定义使用就可以了。
总而言之,结构体的出现可以帮助我们更好地去描述一个复杂对象。
1.2 结构的声明 C游记|《C游记》 番外篇(贰)结构思维禅性稳 四众皆倡结构体
文章图片

例如,描述一个学生:
C游记|《C游记》 番外篇(贰)结构思维禅性稳 四众皆倡结构体
文章图片

1.3 结构成员的类型 【C游记|《C游记》 番外篇(贰)结构思维禅性稳 四众皆倡结构体】结构的成员可以是标量、数组、指针,甚至是其他结构体。
结构体的成员可以包含其他结构体,也可以包含指向自己结构体类型的指针,而通常这种指针的应用是为了实现一些更高级的数据结构如链表和树等。C游记|《C游记》 番外篇(贰)结构思维禅性稳 四众皆倡结构体
文章图片

(贰) 结构体变量的定义和初始化 C游记|《C游记》 番外篇(贰)结构思维禅性稳 四众皆倡结构体
文章图片

C游记|《C游记》 番外篇(贰)结构思维禅性稳 四众皆倡结构体
文章图片

C游记|《C游记》 番外篇(贰)结构思维禅性稳 四众皆倡结构体
文章图片

C游记|《C游记》 番外篇(贰)结构思维禅性稳 四众皆倡结构体
文章图片

C游记|《C游记》 番外篇(贰)结构思维禅性稳 四众皆倡结构体
文章图片

C游记|《C游记》 番外篇(贰)结构思维禅性稳 四众皆倡结构体
文章图片

(叁)结构体成员的访问结构体变量访问成员 结构变量的成员是通过点操作符(.) 访问的。点操作符接受两个操作数。 例如:
C游记|《C游记》 番外篇(贰)结构思维禅性稳 四众皆倡结构体
文章图片

我们可以看到s有成员name和age; 那我们如何访问s的成员?
C游记|《C游记》 番外篇(贰)结构思维禅性稳 四众皆倡结构体
文章图片

结构体指针访问指向变量的成员 有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针。那该如何访问成员?
如下:
C游记|《C游记》 番外篇(贰)结构思维禅性稳 四众皆倡结构体
文章图片

(肆) 结构体传参 直接上代码,大家判断一下下面的print1和print2函数哪个好些?
C游记|《C游记》 番外篇(贰)结构思维禅性稳 四众皆倡结构体
文章图片

答案是:首选print2函数。 原因:
C游记|《C游记》 番外篇(贰)结构思维禅性稳 四众皆倡结构体
文章图片

简单来说:一个是传值调用(1),一个是传址调用(2)
这样可以避免重复生成大块的结构体空间,提高效率
结论: 结构体传参的时候,要传结构体的地址。



    推荐阅读