• 【C语言】还搞不明白结构体吗?不妨来看看这篇文章,带你初步了解结构体


      💘作者:你我皆为凡人

     💘博客主页:你我皆为凡人的博客

     💘名言警句:时间不会为任何人停留,而事物与人,无时不刻也在变化着。每一个人,也都在不停向前!

     💘觉得博主文章写的不错的话,希望大家三连(✌关注,✌点赞,✌评论),多多支持一下!!

     💘系列作品:

     💘牛客网习题练习直达

     💘C语言编程刷题篇

     💘经典题型系列

     

    文章目录

    目录

    文章目录

    前言

    💫结构体类型的声明

    💫结构体初始化

     💫结构体成员访问

    💫结构体传参

     💞习题练习入口

    💞题外话


    前言

    本文讲解了关于C语言中结构体类型的声明,结构体初始化 ,结构体成员访问 ,结构体传参等等一系列新手不容易掌握的知识点


    提示:以下是本篇文章正文内容,下面案例可供参考

    💫结构体类型的声明

    结构是一些值的结合,这些值称为成员变量,结构的每个成员可以是不同类型的变量

    我们在之前的数组是一组相同类型元素的集合,结构我们见过char,short,int long,long long等等都被称作内置类型,描述单一类型的,而在我们生活中有很多复杂对象,比如说描述人需要名字,电话,性别,身高等,描述一本书需要书名,作者,单价,等等,而描述复杂对象就会使用到结构体

    1. //结构体的声明
    2. struct peo1
    3. {
    4. char name[20];
    5. char sex[5];
    6. int high;
    7. char tel[12];
    8. };//一般情况下使用这种
    9. struct peo2//结构体名
    10. {
    11. char name[20];//结构体成员列表
    12. char sex[5];
    13. int high;
    14. char tel[12];
    15. }p1,p2;//两个全局的结构体变量
    16. int main()
    17. {
    18. struct peo1 p1;//结构体变量的创建
    19. return 0;
    20. }

     创建的struct peo1 是类型,实际上是没有占用空间的,而用这个类型创建出来的p1变量才会占用空间,就相当于类型是图纸,而p1是房子,图纸并不会占用面积,盖房子才会占用面积

    结构的成员可以是标量,数组,指针,甚至可以结构体里包含一个结构体,注意包含的结构体必须存在,否则无法使用

    💫结构体初始化

    结构体的初始化指的是在创建的时候同时赋予结构体一个值

    1. struct peo
    2. {
    3. char name[20];
    4. char sex[5];
    5. int high;
    6. char tel[12];
    7. };
    8. struct st
    9. {
    10. struct peo p;
    11. int num;
    12. float f;
    13. };
    14. int main()
    15. {
    16. struct peo p1 = { "zhangsan","男",184,"15545675449" };//结构体的初始化
    17. struct st p2 = { {"lisi","女",167,"15545567544"},122,2.33 };
    18. printf("%s %s %d %s\n", p1.name, p1.sex, p1.high, p1.tel);
    19. printf("%s %s %d %s %d %f\n",p2.p.name,p2.p.sex,p2.p.high,p2.p.tel,p2.num,p2.f);
    20. return 0;
    21. }

     💫结构体成员访问

    结构变量的成员是通过点操作符访问的,接受两个操作数

    而结构体指针访问指向变量的成员,我们有时候需要得到的不是一个结构体的变量,而是指向一个结构体的指针,如下面代码中的函数,需要用箭头指向访问成员

    1. struct peo
    2. {
    3. char name[20];
    4. char sex[5];
    5. int high;
    6. char tel[12];
    7. };
    8. void print1(struct peo* p1)
    9. {
    10. printf("%s %s %d %s\n", p1->name, p1->sex, p1->high, p1->tel);//结构体指针.成员名
    11. }
    12. void print2(struct peo p1)
    13. {
    14. printf("%s %s %d %s\n", p1.name, p1.sex, p1.high, p1.tel);//结构体变量.成员名
    15. }
    16. int main()
    17. {
    18. struct peo p1 = { "zhangsan","男",184,"15545675449" };//结构体的初始化
    19. print1(&p1);
    20. print2(p1);
    21. return 0;
    22. }

    💫结构体传参

    1. void print1(struct peo* p1)
    2. {
    3. printf("%s %s %d %s\n", p1->name, p1->sex, p1->high, p1->tel);//结构体指针.成员名
    4. }
    5. void print2(struct peo p1)
    6. {
    7. printf("%s %s %d %s\n", p1.name, p1.sex, p1.high, p1.tel);//结构体变量.成员名
    8. }
    9. int main()
    10. {
    11. struct peo p1 = { "zhangsan","男",184,"15545675449" };//结构体的初始化
    12. print1(&p1);
    13. print2(p1);
    14. return 0;
    15. }

     其实传参在上面已经有所涉及,函数传参分为两种,第一种是把地址给传过去,第二个是把结构体传过去,那么这两种方式哪个更好呢?

    我们在之前了解到,函数传参的时候,是需要压栈的,如果传递一个结构体对象,传过去的形参是实参的一份临时拷贝,在开辟一块儿空间,造成空间的重复和浪费,传递过去一个结构体对象的时候,结构体过大的话,参数压栈的系统开销比较大,会导致性能的下降,而如果我们传过去地址,地址是4个或者8个字节,而用指针来接收也是4或者8个字节来接收首元素的地址,我们也可以找回去实参的那份内容

    所以结构体传参的时候,要尽量传结构体的地址

     💞习题练习入口

    看完这些不具体操作操作那么是不可以的,可以点击上方直达去练习一些有关习题,也可以随便看一看C语言的一些习题,练习练习选择题和编程题,让自己的知识得到巩固,直接点入标题就可直达,另外想获得大厂内推资格也可以去看看:

    大厂内推

    💞题外话

    在这里博主插句题外话,可直接跳过,我有一个朋友因为满脸痘印毁脸三年,现在恢复的很好,大家如果有同样的困惑和问题,可以去他朋友圈看看加他了解一下:lpy16128227
    效果是真的不错,我亲眼看到他痘痘都没有的,具体情况找他了解

  • 相关阅读:
    【位运算】leetcode 190. 颠倒二进制位
    复合类型(自定义类型)
    鲸鱼优化算法(Matlab代码实现)
    醍醐灌顶,稻盛和夫:人为什么而工作?
    【Android安全】Android 应用组件 | Android 四大组件
    docker 安装gitlab,配置邮件,备份全流程
    基于微信小程序的线上教育课程付费商城(源码+lw+部署文档+讲解等)
    机器学习实战:Python基于GBM梯度提升机进行预测(十四)
    三相智能电表逆相序的原因及解决方法
    1 Go的前世今生
  • 原文地址:https://blog.csdn.net/weixin_45659943/article/details/124875663