• C-11 结构体


    结构体是一种自定义的数据类型,它将不同的变量、数据类型和数组聚集到一个单独的单元中。

    结构体可以让我们去描述复杂对象。例如,结构体可以用于存储学生的姓名、年龄、成绩等信息。再比如,结构体可以用于存储一本书的书名,作者,出版社等信息

    =========================================================================

    结构体的创建和初始化

    无论是上面举例提到的学生亦或是书籍在C语言中都没有相应的类型与之对应,而我们就可以借助结构体去创建一个新的类型出来。

    1. //创建一个学生类型
    2. struct Student
    3. {
    4. char name[20];
    5. int age;
    6. double score;
    7. };
    8. //创建一个书的类型
    9. struct Book
    10. {
    11. char name[20];
    12. float price;
    13. char id[30];
    14. };

    如上所示,这样我们就创建出了一个新的类型。

    1. //创建一个学生类型
    2. struct Student
    3. {
    4. char name[20];
    5. int age;
    6. double score;
    7. };
    8. //创建一个书的类型
    9. struct Book
    10. {
    11. char name[20];
    12. float price;
    13. char id[30];
    14. };
    15. int main()
    16. {
    17. struct Student s = {"张三",20,85.5};
    18. //结构体的初始化
    19. return 0;
    20. }

    这时就将名字,年龄,分数等信息赋给了 s ,这时也就完成了结构体的初始化

    ---------------------------------------------------------------------------------------------------------------------------------

    操作符 .

    1. //创建一个学生类型
    2. struct Student
    3. {
    4. char name[20];
    5. int age;
    6. double score;
    7. };
    8. //创建一个书的类型
    9. struct Book
    10. {
    11. char name[20];
    12. float price;
    13. char id[30];
    14. };
    15. int main()
    16. {
    17. struct Student s = {"张三",20,85.5};
    18. //结构体的初始化
    19. return 0;
    20. }

    还是以这段代码举例,其中结构体中的 name、price、id、age、score 这些都是结构体变量。而在结构体的初始化中的 s 则称为成员变量 。

    1. //创建一个学生类型
    2. struct Student
    3. {
    4. char name[20];
    5. int age;
    6. double score;
    7. };
    8. int main()
    9. {
    10. struct Student s = {"张三",20,85.5};
    11. //结构体的初始化
    12. printf("%s %d %lf\n" , s.name , s.age , s.score);
    13. return 0;
    14. }

    这时如果想打印结构体成员 s  ,就需要借助操作符 . 

    作用是找到这个结构体的成员访问他的成员变量。用法就是结构体变量.成员变量

    ---------------------------------------------------------------------------------------------------------------------------------

    操作符 ->

    除了上面展示的方法打印,还可以运用上次写到的指针来打印。

    1. //创建一个学生类型
    2. struct Student
    3. {
    4. char name[20];
    5. int age;
    6. double score;
    7. };
    8. int main()
    9. {
    10. struct Student s = {"张三",20,85.5};
    11. //结构体的初始化
    12. printf("1:%s %d %lf\n" , s.name , s.age , s.score);
    13. struct Student * pa = &s;
    14. printf("2:%s %d %lf\n" , (*pa).name , (*pa).age , (*pa).score);
    15. return 0;
    16. }

     这样就是借助指针,找到结构体变量的位置,然后使用 . 操作符再次打印。

    当然这样还是太繁琐了,不够直观。

    1. //创建一个学生类型
    2. struct Student
    3. {
    4. char name[20];
    5. int age;
    6. double score;
    7. };
    8. int main()
    9. {
    10. struct Student s = {"张三",20,85.5};
    11. //结构体的初始化
    12. printf("1:%s %d %lf\n" , s.name , s.age , s.score);
    13. struct Student * pa = &s;
    14. printf("2:%s %d %lf\n" , (*pa).name , (*pa).age , (*pa).score);
    15. printf("3:%s %d %lf\n" , ps->name , ps->age , ps->score);
    16. return 0;
    17. }

    第三种写法就等价于第二种写法,不过更加直观。先通过 ps 先找到他 . 的对象 ,然后再找到他成员里的变量。总结一下就是结构体指针->成员变量名

    而这三种方法打印出的结果都是完全相同。

  • 相关阅读:
    chatgpt赋能python:Python如何避免代码重复
    多线程编程和网络编程入门
    Java18新特性
    Springboot企业差旅报销系统_5h38k计算机毕业设计-课程设计-期末作业-毕设程序代做
    06-线程池(3大方法、7大参数,4种拒绝策略)
    【项目开发 | C语言项目 | C语言课程管理系统】
    开源国内镜像站 操作系统、中间件、开发环境
    Linux系统中的“安全管理和操作控制”
    MySQL:事务
    数据结构——图の选择题整理
  • 原文地址:https://blog.csdn.net/ZEBKD_UFXKD/article/details/132924503