• 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 先找到他 . 的对象 ,然后再找到他成员里的变量。总结一下就是结构体指针->成员变量名

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

  • 相关阅读:
    autosar 诊断入门
    瑞斯康达raisecom交换机基础配置
    基于Containerd容器引擎和kubeadm工具部署K8sv1.26.3
    【C++笔试强训】第二十三天
    玩转百万电影解说,必须知道的4个隐藏技巧!包括素材、文案、剪辑、配音4个方面!
    2022“金九银十”精选20道JVM面试重点问题及十大模块知识点笔记,看看你会多少?
    jdbcTemplate使用
    【刷题训练】Leetcode415.字符串相加
    (数据科学学习手札151)速通pandas2.0新版本干货内容
    Red Hat 8 重置root管理员密码
  • 原文地址:https://blog.csdn.net/ZEBKD_UFXKD/article/details/132924503