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

玩转结构体---【C语言】

⛩️博主主页:@威化小餅干
📝系列专栏:【C语言】藏宝图
🎏 ✨绳锯⽊断,⽔滴⽯穿!一个编程爱好者的学习记录!


目录

  • 结构体类型的声明

  • 结构体成员访问

  • 结构体传参


前言

我们是否有想过,为什么会有结构体呢?

在C语言中,我们学过很多种数据类型,如char、short、int、long、float、double等等,但是仅靠这些数据类型难以去描述我们生活中的生活对象的。

例如让我们去描述一本书

要处理的数据有:

  1. 书名

  1. 作者

  1. 定价

...

char BookName[20] //书名
char Name[10]     //作者
int price         //定价
...

如果这样去定义了一本书,再要定义第二本书时就要再写一遍。这样不仅麻烦,而且很容易混淆。

我们可以看到,想要去描述一个生活中的对象时,是需要用到多种数据类型,一起去描述一个复杂的对象,此时就需要借助结构体的力量了。


一、结构体的声明

1、1结构体的基础知识

结构体是将不同类型的数据按照一定的功能需求进行整体封装,封装的数据类型与大小均可以由用户指定。
结构体是一些值的集合。这些值称为成员变量。结构的每个成员可以是不同的类型的变量
除此之外,我们之前还学过数组,数组也是一些值的集合,但与结构体不同的是,数组是一些相同类型的值的集合。

1、2结构的声明

struct tag
{member-list;}variable-list;

例如:

struct Book
{char BookName[20]; //书名char Name[10];     //作者int price;         //定价
}b1;int main()
{struct Book b1;return 0;
}

使用typedef,对结构体重名成Book,这样在使用时写起来变得简单。

typedef struct Book
{char name[10];int price;
}Book;int main()
{Book b3;return 0;
}

1、3结构体类型

结构的成员可以是标量、数组、指针、或者是其它结构体

1、4结构体变量的定义和初始化

//结构体变量的定义
struct point
{int x;int y;
}p1; //声明类型的同时定义变量p1struct point p2;  //单独定义结构体变量p2//初始化的方式
struct stu
{char name[10];int age;
}
struct stu s = {"zhangsan",19};//初始化struct Node
{int data;struct point p;struct Node* next;
}n1 = {10,(4,5),NULL};     //结构体嵌套初始化struct Node n2 = {20,(5,6),NULL};//另一种嵌套初始化


二、结构体成员访问

结构体成员可以通过(.)操作符->)操作符进行访问。

  • (.)操作符访问

  • 结构:结构体变量 . 结构体成员

有时侯我们得到的不是结构体变量,而是指向一个结构体的指针,则使用(->)操作符。

  • (->)操作符

  • 结构:结构体指针->结构体成员


三、结构体传参

传参有两种

  • 值传递地址传递

值传递

地址传递

小结:结构体传参时,尽量要传结构的地址,效果更好一些。

完结

✨✨创作不易,还请各位小伙伴多多点赞关注收藏✨✨

http://www.lryc.cn/news/26734.html

相关文章:

  • c语言指针怎么理解 第二部分
  • GC简介和监控调优
  • Understanding The Linux Kernel --- Part2 Memory Addressing
  • 前后端分页查询好大的一个坑(已解决)
  • Python批量执行读取ini文件和写入ini文件时,性能比较低怎么办,给出解决方案和源码
  • 微机原理与接口技术 汇编语言程序设计DOS常用命令
  • 4.ffmpeg命令转码规则、过滤器介绍、手动流map选项
  • 【python】标准库详解
  • Golang Map原理(底层结构、查找/新增/删除、扩缩容)
  • Java_数组
  • list与vector的区别
  • 【C++、数据结构】位图、布隆过滤器、哈希切割(哈希思想的应用)
  • 计算机网络安全基础知识3:网站漏洞,安装phpstudy,安装靶场漏洞DVWA,搭建一个网站
  • 大话数据结构-迪杰斯特拉算法(Dijkstra)和弗洛伊德算法(Floyd)
  • 2023年全国最新食品安全管理员精选真题及答案10
  • Unity常见面试题详解(持续更新...)
  • java高级篇之三大性质总结:原子性、可见性以及有序性
  • 真涨脸,我用 Python 为朋友自动化整理表格
  • MySQL学习笔记(1.操作数据库与数据的SQL)
  • C++——特殊类设计
  • Scratch少儿编程案例-植物大战僵尸-趣味角色版
  • Vue的路由守卫
  • 【算法】151. 反转字符串中的单词
  • Azure AI基础到实战(C#2022)-认知服务(2)
  • 并发就一定快吗?答:肯定不是啊
  • 前端的学习路线和方法
  • 用C语言写一个自己的shell-Part Ⅱ--execute commands
  • 案例实践|运营腾讯游戏,Proxima Beta 使用 Apache Pulsar 升级团队协作与数据治理...
  • Hudi的7种索引
  • Linux内核(十三)系统软中断 software