💘作者:你我皆为凡人
💘博客主页:你我皆为凡人的博客
💘名言警句:时间不会为任何人停留,而事物与人,无时不刻也在变化着。每一个人,也都在不停向前!
💘觉得博主文章写的不错的话,希望大家三连(✌关注,✌点赞,✌评论),多多支持一下!!
💘系列作品:
目录
本文讲解了关于C语言中结构体类型的声明,结构体初始化 ,结构体成员访问 ,结构体传参等等一系列新手不容易掌握的知识点
提示:以下是本篇文章正文内容,下面案例可供参考
结构是一些值的结合,这些值称为成员变量,结构的每个成员可以是不同类型的变量
我们在之前的数组是一组相同类型元素的集合,结构我们见过char,short,int long,long long等等都被称作内置类型,描述单一类型的,而在我们生活中有很多复杂对象,比如说描述人需要名字,电话,性别,身高等,描述一本书需要书名,作者,单价,等等,而描述复杂对象就会使用到结构体
- //结构体的声明
- struct peo1
- {
- char name[20];
- char sex[5];
- int high;
- char tel[12];
- };//一般情况下使用这种
-
- struct peo2//结构体名
- {
- char name[20];//结构体成员列表
- char sex[5];
- int high;
- char tel[12];
- }p1,p2;//两个全局的结构体变量
- int main()
- {
- struct peo1 p1;//结构体变量的创建
- return 0;
- }
创建的struct peo1 是类型,实际上是没有占用空间的,而用这个类型创建出来的p1变量才会占用空间,就相当于类型是图纸,而p1是房子,图纸并不会占用面积,盖房子才会占用面积
结构的成员可以是标量,数组,指针,甚至可以结构体里包含一个结构体,注意包含的结构体必须存在,否则无法使用
结构体的初始化指的是在创建的时候同时赋予结构体一个值
- struct peo
- {
- char name[20];
- char sex[5];
- int high;
- char tel[12];
- };
- struct st
- {
- struct peo p;
- int num;
- float f;
- };
- int main()
- {
- struct peo p1 = { "zhangsan","男",184,"15545675449" };//结构体的初始化
- struct st p2 = { {"lisi","女",167,"15545567544"},122,2.33 };
- printf("%s %s %d %s\n", p1.name, p1.sex, p1.high, p1.tel);
- printf("%s %s %d %s %d %f\n",p2.p.name,p2.p.sex,p2.p.high,p2.p.tel,p2.num,p2.f);
- return 0;
- }
结构变量的成员是通过点操作符访问的,接受两个操作数
而结构体指针访问指向变量的成员,我们有时候需要得到的不是一个结构体的变量,而是指向一个结构体的指针,如下面代码中的函数,需要用箭头指向访问成员
- struct peo
- {
- char name[20];
- char sex[5];
- int high;
- char tel[12];
- };
- void print1(struct peo* p1)
- {
- printf("%s %s %d %s\n", p1->name, p1->sex, p1->high, p1->tel);//结构体指针.成员名
- }
- void print2(struct peo p1)
- {
- printf("%s %s %d %s\n", p1.name, p1.sex, p1.high, p1.tel);//结构体变量.成员名
- }
- int main()
- {
- struct peo p1 = { "zhangsan","男",184,"15545675449" };//结构体的初始化
- print1(&p1);
- print2(p1);
- return 0;
- }
- void print1(struct peo* p1)
- {
- printf("%s %s %d %s\n", p1->name, p1->sex, p1->high, p1->tel);//结构体指针.成员名
- }
- void print2(struct peo p1)
- {
- printf("%s %s %d %s\n", p1.name, p1.sex, p1.high, p1.tel);//结构体变量.成员名
- }
- int main()
- {
- struct peo p1 = { "zhangsan","男",184,"15545675449" };//结构体的初始化
- print1(&p1);
- print2(p1);
- return 0;
- }
其实传参在上面已经有所涉及,函数传参分为两种,第一种是把地址给传过去,第二个是把结构体传过去,那么这两种方式哪个更好呢?
我们在之前了解到,函数传参的时候,是需要压栈的,如果传递一个结构体对象,传过去的形参是实参的一份临时拷贝,在开辟一块儿空间,造成空间的重复和浪费,传递过去一个结构体对象的时候,结构体过大的话,参数压栈的系统开销比较大,会导致性能的下降,而如果我们传过去地址,地址是4个或者8个字节,而用指针来接收也是4或者8个字节来接收首元素的地址,我们也可以找回去实参的那份内容
所以结构体传参的时候,要尽量传结构体的地址
看完这些不具体操作操作那么是不可以的,可以点击上方直达去练习一些有关习题,也可以随便看一看C语言的一些习题,练习练习选择题和编程题,让自己的知识得到巩固,直接点入标题就可直达,另外想获得大厂内推资格也可以去看看:
在这里博主插句题外话,可直接跳过,我有一个朋友因为满脸痘印毁脸三年,现在恢复的很好,大家如果有同样的困惑和问题,可以去他朋友圈看看加他了解一下:lpy16128227
效果是真的不错,我亲眼看到他痘痘都没有的,具体情况找他了解