• 结构体——C语言初阶


    一.结构体的声明:

    (1)结构的基础知识:
    • 结构体是一种构造数据类型
    • 把不同类型的数据组合成一个整体
    • 结构体是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量
    • 需要注意的是,结构体是一种自定义的数据类型,是创建变量的模板,不占用内存空间;结构体变量才包含了实实在在的数据,需要内存空间来存储。

    (2)结构的声明:
    1. 定义全局变量:
      1. #include
      2. struct People
      3. {
      4. char name[20];
      5. int age;
      6. char sex[5];
      7. char tele[12];
      8. int high;
      9. }p1,p2;
      10. //p1,p2是两个全局变量的结构体变量
      11. int main()
      12. {
      13. return 0;
      14. }

    2. 定义局部变量
      1. #include
      2. struct People
      3. {
      4. char name[20];
      5. int age;
      6. char sex[5];
      7. char tele[12];
      8. int high;
      9. };
      10. int main()
      11. {
      12. struct People p1;//结构体变量的创建
      13. return 0;
      14. }

    注意:不要忘记分号!在结束花括号后的分号表示结构体设计定义的结束;

    (3)结构体成员的类型:

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

    (4)结构体变量的定义和初始化:

    初始化:定义变量的同时赋初值

    定义的三种方式(上面提到了):

    1. #include
    2. struct People
    3. {
    4. char name[20];
    5. int age;
    6. char sex[5];
    7. char tele[12];
    8. int high;
    9. }p1,p2;
    10. //p1,p2是两个全局变量的结构体变量
    11. struct People p3;//全局变量
    12. int main()
    13. {
    14. struct People p4;//局部变量
    15. return 0;
    16. }

    赋值并打印(嵌套):

    1. #include
    2. struct Peo
    3. {
    4. char name[20];
    5. int age;
    6. char sex[5];
    7. };
    8. struct BOOK
    9. {
    10. int page;
    11. struct Peo s;
    12. };
    13. int main()
    14. {
    15. struct Peo p1 = { "blf",19,"boy" };
    16. struct BOOK p2 = { 65,{"qsl",19,"girl"} };
    17. printf("%s %d %s\n", p1.name, p1.age, p1.sex);
    18. printf("%d %s %d %s\n", p2.page, p2.s.name, p2.s.age, p2.s.sex);
    19. return 0;
    20. }

    输出结果:blf 19 boy
                      65 qsl 19 girl


    二.结构体成员的访问:

    • C语言规定,结构体的普通成员可以通过运算符“点.”去访问其成员
    • 点操作符接受两个操作数。
    • 引用形式:<结构体类型变量名>.<成员名>
    • 结构体指针变量如何访问其成员:可以通过箭头符号的方式去访问其成员
    • (*p).name = = p -> name 左右两种方式等价
    • 结构体成员如果是字符串,不能直接通过符号“=”去修改值,可以通过C语言中的拷贝函数strcpy去修改值

    配合代码理解:

    1. #include
    2. struct Peo
    3. {
    4. char name[20];
    5. int age;
    6. char sex[5];
    7. };
    8. struct BOOK
    9. {
    10. int page;
    11. struct Peo s;
    12. };
    13. void print1(struct Peo p)
    14. {
    15. printf("%s %d %s\n", p.name, p.age, p.sex);
    16. }
    17. void print2(struct Peo* sp1)
    18. {
    19. printf("%s %d %s\n", sp1->name, sp1->age, sp1->sex);
    20. printf("%s %d %s\n", (*sp1).name, (*sp1).age, (*sp1).sex);
    21. }
    22. int main()
    23. {
    24. struct Peo p1 = { "blf",19,"boy" };
    25. struct BOOK p2 = { 65,{"qsl",19,"girl"} };
    26. printf("%s %d %s\n", p1.name, p1.age, p1.sex);
    27. printf("%d %s %d %s\n", p2.page, p2.s.name, p2.s.age, p2.s.sex);
    28. print1(p1);
    29. print2(&p1);
    30. return 0;
    31. }


    三.结构体传参:

    1. 函数传参的时候,参数是需要压栈的,如果传递一个结构体对象的时候,结构体过大,参数压栈的系统开销比较大,所以会导致性能的下降;
    2. 结论:结构体传参时,要传结构体的地址

  • 相关阅读:
    抖音矩阵系统。抖音矩阵系统。抖音矩阵系统。抖音矩阵系统。
    【算法3.12】二分图 - 匈牙利算法 NTR算法(完结)
    数据结构刷题训练——二叉树篇(一)
    Dubbo之服务分组、分组聚合。
    R语言计算方差分析的F值和P值
    二叉树的遍历(c++)
    java并发编程:CopyOnWrite容器介绍
    C++11右值引用
    springboot 集成redis
    ORACLE-递归查询、树操作
  • 原文地址:https://blog.csdn.net/qsl_81/article/details/134477148