当前位置: 首页 > news >正文

[C语言入门] 结构体

目录

1. 啥是结构体

2. 啥是结构体变量

3. 创建结构体变量的小细节

3.1 创建全局结构体变量(不推荐)

3.2 创建局部结构体变量(不推荐)

3.3 创建局部结构体变量Plus

4. 结构体在内存里面咋存?

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

5.1 结构体直接传参

5.2 结构体的地址传参


1. 啥是结构体

        结构体就是数据的集合,可以类比一下数组,数组是相同类型的集合;结构体对数据的异同没有任何要求;也就是说结构体是不同/相同类型的集合

2. 啥是结构体变量

        如果你学过面向对象的语言,可以把结构体变量理解为对象;如果你没有学过,那么可以把结构体理解为模版,结构体变量理解为根据模版来做的一些具体的东西;例如结构体人类,结构体变量张三,就是根据结构体人类模版来进行“制作”的具体的人。

#include <stdlib.h>
#include<string.h>// 结构体struct Person{char name[20];  };int main()
{struct Person zhangsan = {"zhangsan"}; // 结构体变量张三,是由结构体人类模版“制作”的printf("%s",zhangsan.name);return(0);
}

3. 创建结构体变量的小细节

3.1 创建全局结构体变量(不推荐)

        我们可以在写结构体的时候顺便把结构体变量定义了,这时候的结构体变量是“全局”的,存在一些问题。

#include <stdlib.h>// 结构体struct Person{char name[20];  }p1,p2; // 全局结构体变量

3.2 创建局部结构体变量(不推荐)

虽然作用域从全局到了局部,但是写起来还是有点麻烦。

#include <stdlib.h>// 结构体struct Person{char name[20];  };int main()
{struct Person p1,p2;// 局部结构体变量return 0;
}

3.3 创建局部结构体变量Plus

使用typedef 来简化创建结构体变量的流程。

#include <stdlib.h>// 结构体typedef struct Person{char name[20];  }P;int main()
{P p1,p2;// 局部结构体变量return 0;
}

4. 结构体在内存里面咋存?

        结构体本身在内存里面并不占用任何空间,当使用结构体创建结构体变量的时候,结构体变量占用内存空间,占用的内存空间跟结构体内的成员变量的大小总和一样。这很好理解,想象一下你拿着一个重量忽略不计的模具,此时重量为0,一旦使用这个模具制作一些“巧克力”、“冰块”,此时这些“巧克力、冰块”就有了重量。

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

5.1 结构体直接传参

和普通变量传值一样,会额外创建一个临时的结构体变量,如果这个结构体变量占用内存很多,那么临时结构体变量就会占用那么多空间,不推荐。

#include <stdlib.h>
#include<string.h>
typedef struct Person
{char name[20]; 
}P;
// 使用结构体直接传参
void print_1(struct Person p1)// 形参:P p1也是可以的
{printf("%s\n",p1.name);
}int main()
{P z = {"张三"};print_1(z);return(0);
}

5.2 结构体的地址传参

使用地址传参,这样就需要创建一个指针变量,而指针变量的大小是一定的(4或者8个字节),所以不用担心内存占用的问题。

#include <stdlib.h>
#include<string.h>
typedef struct Person
{char name[20]; 
}P;// 使用结构体地址传参
void print_2(struct Person* p1)// 形参:P p1也是可以的
{printf("%s\n",p1->name);
}int main()
{P l = {"李四"};print_2(&l);return(0);
}


http://www.mrgr.cn/news/97007.html

相关文章:

  • 接口自动化学习二:session自动管理cookie
  • Maven+Spring实现后端开发
  • Pytorch中预置数据集的加载方式
  • 数据结构学习
  • 大模型学习二:DeepSeek R1+蒸馏模型组本地部署与调用
  • 【MyBatis】深入解析 MyBatis:关于注解和 XML 的 MyBatis 开发方案下字段名不一致的的查询映射解决方案
  • 操作系统(二):实时系统介绍与实例分析
  • python match case语法
  • Vue3 Pinia Store 新建store示例、使用store示例
  • 【大模型】SpringBoot整合LangChain4j实现RAG检索实战详解
  • ros2--gazebo--launch
  • 【gdutthesis模板】章节标题有英文解决方案
  • Tmux 核心操作速查指南
  • 【c++深入系列】:类与对象详解(中)
  • STM32单片机入门学习——第12节: [5-2]对射式红外传感器计次旋转编码器计次
  • 基于yolo11的BGA图像目标检测
  • 动、静态创建任务
  • MySQL - 事务隔离级别和锁的机制
  • WPF设计学习记录滴滴滴4
  • 基础科学中的人工智能︱如何用机器学习方法求解排列型组合优化问题?