• C语言结构体


    一、结构体

            C语言提供了基本的数据结构,例如 char 、short 、int 、float....等类型;这些偶称为内置类型。怎样设计出来属于自己的类型?

            比如:当我们定义一个人的时候,人的不同属性就比较难用同一个数据类型来定义了,因为人的身高、年龄、体重等属性往往需要不同数据类型,在这个时候,我们便引入结构体这个概念

            使用结构体来封装一些属性,设计出新的类型,在C语言中称为结构体类型。结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量

    结构声明(structure declaration)

    1. struct 结构体名
    2. {
    3. 成员列表(可以是基本的数据类型,指针,数组或其他结构类型)
    4. };
    5. /*struct关键词表示接下来是一个结构。*/
    1. struct People
    2. {
    3. char s_id[8];
    4. char s_name[8];
    5. char s_sex[4];
    6. int s_age;
    7. };

    注意;

    1. 关键字struct是数据类型说明符,指出下面说的是结构体类型;
    2. 标识符Student是结构体的类型名;
    3. 最后的分号一定要写;

    二、结构体的定义及初始化

           结构体的声明只是进行一个简单的描述,实际上在没有定义结构体类型变量之前,它是不会在内存中分配空间的。

    1. int main()
    2. {
    3. struct People people;//局部变量--放在栈区
    4. return 0;
    5. }

    * struct 结构体名称 结构体变量名

           结构体是一种数据类型,也就是说可以用它来定义变量。就像一个“模板”,定义出来的变量都具有相同的性质。可以将结构体比作“图纸”,结构体变量比作“零件”,根据同一张图纸生产出来的零件的特性都是一样的;

    1. 结构体是一种数据类型,是创建变量的模板,不占用内存空间;
    2. 结构体变量才包含了实实在在的数据、需要存储空间;

    三、结构体成员访问 

    • 结构体变量使用   .   访问;
    • 结构体变量.对象
    1. #include<stdio.h>
    2. #include<string.h>
    3. struct Date
    4. {
    5. int year;
    6. int month;
    7. int day;
    8. };
    9. struct Student
    10. {
    11. char s_name[20];
    12. struct Date birthday;
    13. float score;
    14. };
    15. int main()
    16. {
    17. struct Student stu = { "liuwen",2000,10,1,99.9 };
    18. printf("name=%s\nbirtyday=%d.%d.%d\nscore=%f\n", stu.s_name, stu.birthday.year, stu.birthday.month, stu.birthday.day, stu.score);
    19. stu.score = 77;
    20. printf("name=%s\nbirtyday=%d.%d.%d\nscore=%f\n", stu.s_name, stu.birthday.year, stu.birthday.month, stu.birthday.day, stu.score);
    21. return 0;

    注意:对结构体变量整体赋值有三种情况

    1.  定义结构体变量(用{}初始化)
    2. 用已定义的结构体变量初始化
    3. 结构体类型相同的变量可以作为整体相互赋值;

    在C语言中不存在结构体类型的强制转换。

    四、结构体变量和指针

    内置类型可以定义指针变量,结构体类型也可以定义结构体类型指针;

    结构体类型指针访问成员的获取和赋值形式:

    (1)(*p). 成员名(.的优先级高于*,(*p)两边括号不能少)

    (2)   p->成员名(->指向符)

    1. #include<stdio.h>
    2. #include<string.h>
    3. struct Inventory//商品
    4. {
    5. char description[20];//货物名
    6. int quantity;//库存数据
    7. };
    8. int main()
    9. {
    10. struct Inventory sta = { "iphone",20 };
    11. struct Inventory* stp = &sta;
    12. char name[20] = { 0 };
    13. int num = 0;
    14. (*stp).quantity = 30;
    15. stp->quantity = 30;
    16. strcpy_s(name,sizeof(stp->description),stp->description);
    17. printf("%s %d\n", stp->description, stp->quantity);
    18. printf("%s %d\n", (*stp).description, (*stp).quantity);
    19. return 0;
    20. }

    结构体和函数 

    1. #include<stdio.h>
    2. #include<string.h>
    3. #define _CRT_SECURE_NO_WARNINGS
    4. struct School
    5. {
    6. char s_name[20];//学校
    7. int s_age;
    8. };
    9. void Print_a(struct School sx)
    10. {
    11. printf("%s %d\n", sx.s_name, sx.s_age);
    12. }
    13. void Print_c(struct School* sp)
    14. {
    15. printf("%s %d\n", sp->s_name, sp->s_age);
    16. }
    17. int main()
    18. {
    19. struct School sx = { "xi'an",100 };
    20. Print_a(sx);
    21. Print_c(&sx);
    22. return 0;
    23. }

    五、struct和class的区别

      1、什么是class?

      class(类)是面向对象编程的基本概念,是一种自定义数据结构类型,通常包含字段、属性、方法、属性、构造函数、索引器、操作符等。因为是基本的概念,所以不必在此详细描述,读者可以查询相关概念了解。我们重点强调的是.NET中,所有的类都最终继承自System.Object类,因此是一种引用类型,也就是说,new一个类的实例时,对象保存了该实例实际数据的引用地址,而对象的值保存在托管堆(managed heap)中。

      2、什么是struct?

      struct(结构)是一种值类型,用于将一组相关的信息变量组织为一个单一的变量实体。所有的结构都继承自System.ValueType类,因此是一种值类型,也就是说,struct实例分配在线程的堆栈(stack)上,它本身存储了值,而不包含指向该值的指针。所以在使用struct时,我们可以将其当作int、char这样的基本类型类对待。
     

    • 1.默认继承权限,class的继承按照private继承处理,struct的继承按照public继承处理;
    • 2.成员的默认访问权限。class的成员默认是private权限,struct默认是public权限。
    • 3.struct是值类型,class 是对象类型

    六、参考 

  • 相关阅读:
    【每日一题】补档 ABC308E - MEX | 遍历保存 |简单
    LeetCode算法心得——和可被 K 整除的子数组(前缀和+HashMap)
    如何在Flutter中集成华为应用内消息
    移动目标轨迹预测方法研究综述
    Unity实现设计模式——迭代器模式
    9.2 校招 内推 面经
    Illegal key size问题
    EtherCAT主站SDO读报文抓包分析
    JDBC+BDUtil的扩展和SQL注入问题 +事务
    【洁洁送书第七期】现在学 Java 找工作还有优势吗
  • 原文地址:https://blog.csdn.net/weixin_42322206/article/details/125447892