结构体比较复杂!知识相对来说比较多。作者也是对着日本作家柴田望洋的《明解C语言》反复学习才总结出这篇文章的。话不多说快来学习吧!
目录
1.结构体的声明
2.结构体成员的类型
3 . 运算符
4 -> 运算符
5.结构体传参
什么是结构体?简单来说,结构体就是聚合了一系列数据的数据结构。这些数据可以是不同类型的变量。
1.结构体的声明

讯享网
这就是结构体的声明。一但声明了结构体,就能在程序中自由的使用“struct 结构名”的结构体类型。
同时我们还可以创建结构体变量:
这里的s1,s2,s3是相同的意思,只是s1,s2表示的是全局变量,而s3表示的是局部变量。
2.结构体成员的类型
我们用struct student来表示结构体类型中的名字、身高、奖学金。

在大括号里面的结构体成员就是被初始化的对象,他们之间用逗号进行分割。(未被初始化的元素被初始化成0)

3 . 运算符
zhangsan.height 对象名.成员名
其中, . 被称为句点运算符,用来表示结构体对象的成员。
4 -> 运算符
在指针变量前加上指针运算符*,就表示该指针指向的对象实体。
在结构体中,可以通过这种形式表示身高 :
(*student).height
通过*student可以表示其指向对象的身高成员。但是,这样子的写法既麻烦又容易出错,素以简介著称的C语言可不会有此疏漏。于是,->出现了。
student->height 表示 指向结构体的指针->成员名
故对于指针指向的结构体成员,推荐使用 ->运算符将其简写。
5.结构体传参
既然都说到了->运算符,那么结构体传参也是必须要介绍的了。
首要问题就是:
结构体传参,传值还是传址?
作者在上一篇文章函数栈帧的创建里面详细介绍了相关内容,C语言:那些不为人所知的函数栈帧的创建和销毁(底层知识)_m0_的博客-CSDN博客
https://blog.csdn.net/m0_/article/details/?spm=1001.2014.3001.5501
我们首选函数传址!因为函数如果传值的话,会重新开辟一份内存空间,这对于内存的占用是巨大的。但若是传址调用,只需要把原空间的的地址传过去,这是不是非常环保呢?
struct S { int data[1000]; int num; }; struct S s = {
{1,2,3,4}, 1000}; //结构体传参 void print1(struct S s) { printf("%d\n", s.num); } //结构体地址传参 void print2(struct S* ps) { printf("%d\n", ps->num); } int main() { print1(s); //传结构体 print2(&s); //传地址 return 0; }
讯享网
(原代码摘录自 原来45 的博客,是一位非常厉害的大佬,有兴趣的小伙伴可以去看看)
(结构体)C语言从入门到入土(入门篇)_原来45的博客-CSDN博客
https://blog.csdn.net/weixin_/article/details/至此结构体的内容就简单介绍完了,最后强推日本作家柴田望洋的《明解C语言》这套书,里面知识讲的非常明晰!
咱们下期再见!


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/19519.html