c/c++ c语言结构体

结构体

1: 程序设计中有很多很复杂的对象,这些对象之间有很多属性,如果每个对象都分开管理他们的各个属性,这样,不方便维护和统一的管理;
2: C语言允许把一些列的数据属性打包在一起,形成一个整体,这个是就是结构体,结构体可以看作是扩展的新的类型;
3: 结构体的定义: 定义这个结构体是由哪些数据成员得到
struct 结构体的名字 {
数据类型 名字1;
数据类型 名字2;
…. ….
};
定义了一种新的类型,这种类型包含了里面的数据成员;
4: 定义一个结构体变量/数组 struct 结构体类型 变量名字; struct 结构体类型 名字[大小];
5: 结构体的内存: 结构体变量定义在哪里,内存分配在哪里,每个数据成员按照顺序一个一个的从低地址开始向高地址存储;
6: 定义一个结构体指针 变量 struct 结构体类* 变量名字; ->
7: sizeof(struct 类型), sizeof(变量);


  • 思考:
    • 学校管理100个学生,每个学生有
    • 姓名 char 数组;
    • 年龄 int 整型;
    • 性别 int 整数;
    • 年级 int 整数;
    • 班级 int 整数;
    • 学号 char 数组来表示;
    • 如果要管理一个学生信息,该怎么做??
    • 假设又要新增加一个等级
    • 有没有一种可能,把属于同一个类型的数据属性打包在一起;
    • 产生一个新的数据类型

这时需要用到结构体

  • 结构体的定义
    • c/c++ c语言结构体
    • 定义了一种新的数据类型,类型 的结构体;
    • 这种数据类型包含了{}里面的数据类型的成员
    • c/c++ c语言结构体
    • struct 结构体的类型名字 {大括号里面是结构体的内容}

  • 结构体的内存分配;
    • 结构体的变量定义在哪里,内存就分配在哪里;
    • xm作为局部变量定义,所以内存在栈上;
    • 内存是怎么排布:
      • 内存是从低地址开始然后从第一个数据成员开始依次排布下去;
      • c/c++ c语言结构体
    • 指针是由低地址拨到高地址的
      • c/c++ c语言结构体
    • -

  • 计算结构体的大小
  • sizeof(int)返回这个数据类型所在的内存大小
    • c/c++ c语言结构体
  • 计算变量的大小
    • c/c++ c语言结构体

  • 结构体的访问,我们需要访问结构体的成员;
  • 结构体变量,结构体的名字,来访问我们的成员;
    • c/c++ c语言结构体

  • 结构体变量初始化
    • 先定义一个变量,然后一个一个成员的初始化;
    • 第二种,定义变量的时候直接每个成员初始化,从第一个成员开始;
    • 可以不用全部初始化完,但是,要从第一个开始,挨个的初始化;
      • c/c++ c语言结构体

  • 结构体数组;相当于是自己扩展出来的一种新的数据类型;
  • 结构体 数组名字[数组大小];
    • c/c++ c语言结构体
    • -

  • 结构体指针
    1: 结构体的初始化:
    struct 数据类型 变量名字 = {
    每个成员的数据,
    ….
    };
    2: 结构体变量.数据成员 来访问里面的数据成员;
    3:结构体的指针->数据成员来访问指针指向的结构体内存的成员变量;
    4: (*结构体指针).结构体成员

    • 定义一个指针变量,用来存放结构体的内存地址;
    • 指针变量只是4个字节(32bit)的变量而已;
    • 存放的是变量的内存地址;
    • 指针是通过->来访问它所保存的地址为开始地址,结构体的数据
      • c/c++ c语言结构体
      • *指针变量,获取指针变量里面的内存地址所对应的变量
      • (*s_p) 就是学生变量;
      • c/c++ c语言结构体

结构体动态内存分配

1: 在对上分配一个结构体对象 malloc(sizeof(strucnt 结构类型));
2: 释放结构体对象free(结构体对象);
3: memset来重置结构体的内存: memset(内存地址, value, 结构体大小);
4: memcpy可以来复制一个结构体到另一个同类型的结构体对象里面;


  • 结构体动态内存分配,malloc
    • c/c++ c语言结构体
  • 动态内存分配结构体数组
    • c/c++ c语言结构体

结构体的传递参数

1: 结构体类型作为参数进行传递;
2: 结构体指针作为参数进行传递;
3: 传值与传地址的比较;
4: 返回结构体;


  • 列表内容

c/c++ c语言结构体

  • 返回结构体
    • c/c++ c语言结构体