• C语言中的结构体


    CSDN话题挑战赛第2期
    参赛话题:学习笔记

    学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路。学习之乐,独乐乐,不如众乐乐,把知识讲给更多的人听,何乐而不为呢?

    目录

    一.结构体类型的声明

    结构的基础知识

    结构的声明

    例子

    二.结构体成员的类型

    三.结构体成员的访问

    四.什么叫做压栈操作

     结论


    一.结构体类型的声明

    结构的基础知识

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

    结构的声明

    例子

    代码

    1. #include
    2. //struct(结构体关键字),Stu-结构体标签 struct Stu-结构体类型
    3. struct Stu
    4. {
    5. //成员变量
    6. char name[20];
    7. short age;
    8. char tale[12];
    9. char sex[5];
    10. };
    11. int main()
    12. {
    13. struct Stu s;
    14. return 0;
    15. }

     

     利用结构体去创建变量的时候,有两种方法:
    一种是创建局部变量
    一种是创建全局变量

     

    二.结构体成员的类型

    结构的成员可以是标量、数组、指针,甚至是其他结构体。

     

    1. #include
    2. struct S
    3. {
    4. int a;
    5. char c;
    6. char arr[20];
    7. double d;
    8. };
    9. struct T
    10. {
    11. char ch[10];
    12. struct S s;//这里结构体成员是其他结构体
    13. char* pc;
    14. };
    15. int main()
    16. {
    17. char arr[]="hello,World!\n";
    18. struct T t={"hh",{100,"w","haha",3.14},arr};
    19. printf("%s\n",t.ch);
    20. printf("%s\n",t.s.arr);
    21. printf("%lf\n",t.s.d);
    22. printf("%s\n",t.pc);
    23. return 0;
    24. }

    运行结果是

    当结构体成员是结构体,访问它的时候依然跟其他结构体成员一样用点操作符即可。

    三.结构体成员的访问

    1. 结构体变量访问成员结构变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数。
    2. 结构体指针访问指向变量的成员有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针。
    1. #include
    2. typedef struct Stu//typefef-换名的一个操作符
    3. {
    4. char name[20];
    5. short age;
    6. char tele[12];
    7. char sex[5];
    8. }stu;//这里将Stu换成stu,后面需要用该结构体时就只需要用stu就可以了
    9. void print1(stu tmp)//写一个函数用点操作符输出结构体成员
    10. {
    11. printf("name: %s\n",tmp.name);
    12. printf("age: %d\n",tmp.age);
    13. printf("tele: %s\n",tmp.tele);
    14. printf("sex: %s\n",tmp.sex);
    15. }
    16. int main()
    17. {
    18. stu s={"李四",40,"15524235464","男"};
    19. print1(s);
    20. return 0;
    21. }

    运行结果是

     用函数传参时,我们既可以用点操作符也可以用结构体指针如下图:

     那么如图所示,当我们需要打印结构体数据时,这两种方法更好呢?

    答案是:首选print2函数,原因:
    函数传参的时候,参数是需要压栈的。如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。

    四.什么叫做压栈操作

    栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。如图

     

     结论

    结构体传参的时候,要传结构体的地址。
     

  • 相关阅读:
    ViTag :在线 WiFi 精细时间测量辅助多人环境中的视觉-运动身份关联
    分享从零开始学习网络设备配置--任务3.5 使用静态路由实现网络连通
    mysql—面试50题—1
    711气象雷达电路图
    数据结构中的七大排序(Java实现)
    SpringMVC入门宝典(六)SpringMVC文件上传(上)
    【栈应用】简化路径
    Glide源码分析
    灾难恢复架构规划要点
    Easyx介绍与安装
  • 原文地址:https://blog.csdn.net/weixin_63318044/article/details/127112287