学习结构体

1.定义:

  • 结构体可以理解为自定义的数据类型
  • 是由一批数据组合而成的结构型数据

2.格式

复制代码
#include <stdio.h>
int main()
{
  struct 结构体名字
  {
      成员1;
      成员2;
      ......
  }
  return 0;
}
struct Teacher
{
    char name[100];
    int age;
    int workAge;
}

结构体:

  • 自定义的数据类型
  • 就是由很多的数据组合成的一个整体
  • 每一个数据,都是结构体的性质

书写的位置:

  • 函数的里面:局部位置,只能在本函数中使用
  • 函数的外面:全局位置,在所有的函数中都可以使用

练习:

另外:函数名如果太长也可以起别名

复制代码
typedef struct
{
    成员1;
    成员2;
    ......
}别名;//这个别名可以很短
使用时可以直接写别名.变量

练习:

3.结构体作为函数参数进行传递

函数中可以传递结构体

会出现两种情况:

  • 传递结构体中的数据值
  • 传递结构体的地址值

ps:如果要在函数中修改stu的值,此时就不要再定义一个新的变量了,直接接收stu的内存地址,通过内存地址(即指针)就可以修改stu中的数据了,指针st里记录的是main函数中stu的内存地址(stu 学生)

4.结构体的嵌套

如果结构体中成员的类型是其他的结构体,就用到了结构体的嵌套

注意:结构体嵌套批量赋值时,里面要再加一个大括号

练习:

5.综合练习

6.结构体内存对齐

  • 确定变量位置:只能放在自己类型整数倍的内存地址上
  • 内存对齐:不管是结构体还是普通变量,都存在内存地址
  • 规则:只能放在自己类型整数倍的内存地址上

比如:int类型的字节数为4,所以要接着放好的空间剩下的往下放在整数倍的位置上,然后依次挨着往下放4个,char类型的字节数为1,放哪都一样,只占一个空间

  • 另外,最开头放的直接从0位置开始放字节数,比如下面的double
  • 注意:

结构体的内存对齐要在上面的规则上加一条:结构体的总大小是最大类型的整数倍(用来确定最后一个数据的补位情况),注意对齐的时候会有一些位置空白,会补上空白字节,但这些不会影响到原来补上的类型的字节数,比如char补上后字节数依然为1

  • 心得:我们会把小的数据类型写在上面,大的写在下面,尽量地节约空间

图例:

操作验证:

相关推荐
路弥行至7 分钟前
C语言入门教程 | 第四讲:深入理解数制与码制,掌握基本数据类型的奥秘
服务器·c语言·开发语言·经验分享·笔记·其他·入门教程
GilgameshJSS35 分钟前
STM32H743-ARM例程11-PWM
c语言·arm开发·stm32·嵌入式硬件·学习
Imxyk1 小时前
Codeforces Round 1052 (Div. 2) C. Wrong Binary Searchong Binary Search
c语言·c++·算法
yanqiaofanhua6 小时前
C语言自学--数据在内存中的存储
c语言·开发语言
知识分享小能手7 小时前
React学习教程,从入门到精通,React 单元测试:语法知识点及使用方法详解(30)
前端·javascript·vue.js·学习·react.js·单元测试·前端框架
rzjslSe9 小时前
【JavaGuide学习笔记】理解并发(Concurrency)与并行(Parallelism)的区别
java·笔记·学习
Cherry Zack10 小时前
了解Django模型,从基础到实战
python·学习·django
茯苓gao10 小时前
CAN总线学习(四)错误处理 STM32CAN外设一
网络·笔记·stm32·单片机·学习
学不动CV了11 小时前
FreeRTOS---任务级和中断级临界区管理使用的理解与源码分析
c语言·arm开发·stm32·单片机·嵌入式硬件·51单片机
虚行11 小时前
C#上位机 通过ProfitNet连接西门子PLC教程--系统模拟环境搭建
学习·c#·plc