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

C语言-结构体【详解】

一、 结构体的基础知识

  • 结构是一些值的集合,这些值称为成员变量
  • 结构的每个成员可以是不同类型的变量

(1)结构体的声明

写法一:

注:

  • 括号后边的分号不能忘
  • 结构体末尾可以不创建变量,在主函数中再创建
struct Book
{char name[20]; //书名int price; //价格
};

写法二:

注:

  • 在结构体末尾和主函数中都可以创建变量
  • 区别:结构体后边直接创建的是全局变量,在主函数中创建的是局部变量

在这里插入图片描述
写法三:

注:

  • 可以利用 typedef 重命名或定义结构体
  • 若使用 typedef 定义,则结构体末尾不能创建全局变量,而应该写结构体新的名称,新名称后边的分号不能丢失
  • 若非要创建全局变量,需单独创建
  • 此处,新的结构体名称 Book 代替的是 struct Book 这一整体,在创建结构体变量时,可直接写Book b5;来代替struct Book b5;
typedef struct Book
{char name[20];int price;
}Book; //不可以创建全局变量,此处是新的结构体名//如果实在想使用全局变量,需单独创建
Book b3;
Book b4;int main()
{struct Book b1;struct Book b2;Book b5;Book b6;return 0;
}

(2)结构成员的类型

  • 结构的成员可以是标量、数组、指针,甚至是其他结构体
struct S
{char c;char arr[10];int *p;
};struct B
{int a;struct S s;double d;
};int main()
{return 0;
}

(3)结构体变量的初始化

例1:

struct S
{char c;char arr[10];int* p;
};struct B
{int a;struct S s;double d;
};int main()
{struct S s1 = { 'c',"张三",NULL }; //初始化int a = 10;struct B s2 = { 100,{'q',"list",&a},3.14 }; //结构体嵌套初始化return 0;
}

例2:

  • 初始化时可以按顺序初始化,也可以不按顺序
struct Book
{char name[20];int price;
};int main()
{//按顺序初始化struct Book b1 = {"鹏哥C语言", 66};//不按顺序初始化struct Book b2 = { .price = 80, .name = "杭哥C++"};//打印printf("%s %d\n", b1.name, b1.price);printf("%s %d\n", b2.name, b2.price);return 0;
}

在这里插入图片描述

二、 结构体成员的访问

访问结构体成员的方式:

  • 结构体变量 . 结构体成员
  • 结构体指针 -> 结构体成员
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>struct Book
{char name[20];int price;
};void print(struct Book* p)
{printf("%s %d\n", p->name, p->price);
}int main()
{struct Book b1 = {"鹏哥C语言", 60};struct Book b2 = { .price = 80, .name = "杭哥C++"};struct Book b3 = { "JAVA",70 };//结构体变量.结构体成员printf("%s %d\n", b1.name, b1.price);printf("%s %d\n", b2.name, b2.price);//结构体指针->结构体成员struct Book* p1 = &b3;print(p1); //结构体地址传参return 0;
}

在这里插入图片描述

三、结构体传参

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>struct S
{int arr[100];int n;
};void print1(struct S ss)
{for (int i = 0; i < 10; i++){printf("%d ", ss.arr[i]);}printf("\n%d\n", ss.n);
}void print2(struct S* ps)
{for (int i = 0; i < 10; i++){printf("%d ", ps->arr[i]);}printf("\n%d\n", ps->n);
}int main()
{struct S s = { {1,2,3,4,5}, 100 };print1(s);print2(&s);return 0;
}

在这里插入图片描述

❗上面的 print1 和 print2 函数哪个好些❓

  • 答案:首选 print2 函数。

原因:

  • 函数传参的时候,参数是需要压栈的。如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。

结论:

  • 结构体传参的时候,要传结构体的地址。

相关文章:

C语言-结构体【详解】

一、 结构体的基础知识 结构是一些值的集合&#xff0c;这些值称为成员变量结构的每个成员可以是不同类型的变量 &#xff08;1&#xff09;结构体的声明 写法一&#xff1a; 注&#xff1a; 括号后边的分号不能忘结构体末尾可以不创建变量&#xff0c;在主函数中再创建 struc…...

浏览器输入url到页面渲染完成经历了哪些步骤

一、URL解析 这一步比较容易理解&#xff0c;在浏览器地址栏输入url后&#xff0c;浏览器会判断这个url的合法性 &#xff0c;以及是否有可用缓存&#xff0c;如果判断是 url 则进行域名解析&#xff0c;如果不是 url &#xff0c;则直接使用搜索引擎搜索 二、域名解析 输入…...

大数据技术之Hadoop(Yarn)

第1章Yarn资源调度器思考&#xff1a;1&#xff09;如何管理集群资源&#xff1f;2&#xff09;如何给任务合理分配资源&#xff1f;Yarn是一个资源调度平台&#xff0c;负责为运算程序提供服务器运算资源&#xff0c;相当于一个分布式的操作系统平台&#xff0c;而MapReduce等…...

5.建造者模式

目录 简介 四个角色 应用场景 实现步骤 和工厂模式的区别 简介 建造者模式也叫生成器模式&#xff0c;是一种对象构建模式&#xff1b;它可以把复杂对象的建造过程抽象出来(抽象类别)&#xff0c;使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象&#xff1b;…...

数据库基础-数据库基本概念(1-1)

你好&#xff0c;欢迎来到数据库基础系列专栏&#xff0c;欢迎留言互动哦~ 目录一、数据库基础1. 数据库基本概念1.1 数据库1.2 什么是数据库管理软件1.3 表1.4 行1.5 列和数据类型1.6 主键1.7 什么是 SQL一、数据库基础 1. 数据库基本概念 1.1 数据库 数据库是一个以某种有…...

学习笔记-架构的演进之服务容错策略-服务发现-3月day01

文章目录前言服务容错容错策略附前言 “容错性设计”&#xff08;Design for Failure&#xff09;是微服务的一个核心原则。 使用微服务架构&#xff0c;拆分出的服务越来越多&#xff0c;也逐渐导致以下问题&#xff1a; 某一个服务的崩溃&#xff0c;会导致所有用到这个服务…...

采编式AIGC视频生产流程编排实践

作者 | 百度人工智能创作团队 导读 本文从业务出发&#xff0c;系统介绍了采编式 TTV的实现逻辑和实现路径。结合业务拆解&#xff0c;实现了一个轻量级服务编排引擎&#xff0c;有效实现业务诉求、高效支持业务扩展。 全文6451字&#xff0c;预计阅读时间17分钟。 01 背景 近…...

Leetcode23. 合并k个升序链表

一、题目描述&#xff1a; 给你一个链表数组&#xff0c;每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。 示例 1&#xff1a; 输入&#xff1a;lists [[1,4,5],[1,3,4],[2,6]]输出&#xff1a;[1,1,2,3,4,4,5,6]解释&#…...

从用户出发,互联网产品策划方法论

【一】从用户到需求 产品经理需要具备两个非常重要的技能,一个叫策划,一个叫感知用户。 我们在分析问题的时候往往会说“这么做,我认为用户会怎么怎么样”、“用户会认为这样很不爽”,当我们这样说时,很有可能是把自己当成了用户,用某些特定的情感或记忆代表了用户。 当我…...

STM32 E18-D80NK红外检测

本文代码使用 HAL 库。 文章目录前言一、E18-D80NK 红外传感器&#xff1a;1. E18-D80NK 的介绍2. 电器特性二、红外检测小实验代码讲解三、实验现象总结前言 这篇文章介绍 如何使用 STM32 控制 E18-D80NK 进行红外检测。 一、E18-D80NK 红外传感器&#xff1a; 1. E18-D80N…...

Linux常用命令--进程和计划任务管理

一、程序和进程的关系 1、程序 ①保存在硬盘、光盘等介质中的可执行代码和数据 ②静态保存的代码 2、进程 ①在cpu及内存中运行及进程代码 ②动态执行的代码 ③父&#xff08;fork&#xff09;、子进程&#xff0c;每个程序可以创建一个或多个进程 父进程和子进程的区别&am…...

Unity TextMeshPro

Unity TextMeshPro 简介 TextMeshPro(也简称为TMP)号称是Unity的终极文本解决方案,它是Unity 的 UI 文本和旧版文本网格体的完美替代品。 功能强大且易于使用,使用高级文本渲染技术以及一组自定义着色器;提供实质性的视觉质量改进,同时在文本样式和纹理方面为用户提供令人…...

虹科分享| 浅谈HK-Edgility边缘计算平台

上周&#xff0c;我们推出了虹科新品HK-Edgility边缘计算平台以及uCPE解决方案。本篇文章我们再来谈一谈到底什么是边缘计算&#xff1f;为什么需要边缘计算&#xff1f;边缘计算和云计算有什么关系&#xff1f;HK-Edgility边缘计算平台将为您带来什么&#xff1f;一、边缘计算…...

React Router v6详解

旧版本React Router使用方式 BrowserRouter&#xff1a;通过 history 库&#xff0c;传递 history 对象&#xff0c;location 对象Switch&#xff1a;匹配唯一的路由 Route&#xff0c;展示正确的路由组件Route&#xff1a;视图承载容器&#xff0c;控制渲染 UI 组件 新版本R…...

帮助100w人成功入职的软件测试面试常见问题以及答案

测试面试题怎么来设计测试方案根据测试需求&#xff08;包括功能需求和非功能性需求&#xff09;&#xff0c;识别测试要点&#xff0c;识别测试环境要求&#xff0c;安排测试轮次&#xff0c;根据项目计划和开发计划做整体的测试安排。被测试的特性&#xff1a;通过对需求规格…...

tensorflow2.4--2.回归问题分析

文章目录前言流程案例操作前言 流程 回归问题预测连续值,在某个区间内变动. 常见的线性回归问题模型是yaxb,然而现实世界由于大量的数据偏差以及复杂度,同时还有大量的噪声,往往达不到如此的精确解,实际解决问题时需要考虑噪声的存在 对于噪声,往往我们已经假设了它符合高斯…...

【2023】DevOps、SRE、运维开发面试宝典之Kafka相关面试题

文章目录 1、消息队列的流派2、kafka的优势3、Kafka与Zookeeper的关系4、Kafka消息队列各组件概念5、Kafka消息队列应用场景6、Kafka消息收发的过程7、Kafka消息数据存储概念8、kafka消息的偏移量概念原理9、Kafka消息数据的顺序消费概念原理10、Kafka单播消费消息的原理11、Ka…...

CentOS系统编译安装PHP-5.6.27版本

一、手动安装编译工具&#xff1a; yum install -y gcc gcc-c 二、添加用户和用户组&#xff1a; groupadd web useradd -M -s /sbin/nologin -g web php 三、yum安装依赖&#xff1a; yum -y install libmcrypt libmcrypt-devel mcrypt mhash libxml2-devel libpng-devel l…...

和风SDK查询城市ID(保姆级教程)

android studio版本&#xff1a;2021.2.1例程名&#xff1a;hfserachcityid这几天没什么事做&#xff0c;而且我原来那个“项目”因为免费api不能用了&#xff0c;只能改为和风的免费api,但需要申请&#xff0c;而且还要城市ID&#xff0c;玩天气的基本都知道城市ID这个东西&am…...

暴力递归到动态规划

暴力递归到动态规划 假设有排成一行的n个位置&#xff0c; 记为1~n&#xff0c;n-定大于或等于2。开始时机器人在其中的m位置上(m 一定是1~n中的一个)。如果机器人来到1位置&#xff0c;那么下一步只能往右来到2位置&#xff1b;如果机器人来到n位置&#xff0c; 那么下一步只能…...

Java:Java仍然处于领先地位?

没有多少编程语言能够自吹自擂并持续流行20多年&#xff0c;但Java就是其中之一。Java应用程序不仅局限于web和移动开发&#xff0c;而且给大数据和人工智能留下了深刻的印象。不用多说&#xff0c;让我们讨论一下Java流行的几个原因!!1.实用性根据JamesGosling的说法&#xff…...

虚拟地址空间

本节目录1.如何理解区域划分2.为什么一个变量可以存储两个不同的值&#xff1f;3.深入理解虚拟地址空间为什么要有地址空间&#xff1f;4.理解什么是挂起&#xff1f;1.虚拟地址空间究竟是什么&#xff1f;2.映射关系的维护是谁做的&#xff1f;1.如何理解区域划分 所谓的区域…...

Python基础篇(十五)-- Pygame游戏编程

1 初识Pygame Pygame是一个开源的Python模块&#xff0c;专门用于多媒体应用&#xff08;如电子游戏&#xff09;的开发&#xff0c;其中包含对图像、声音、视频、事件、碰撞等的支持。Pygame建立在SDL的基础上&#xff0c;SDL是一套跨平台的多媒体开发库&#xff0c;用C语言实…...

LeetCode 热题 HOT 100 Java 题解 -- Part 2

练习地址 Part 1 : https://blog.csdn.net/qq_41080854/article/details/128829494 LeetCode 热题 HOT 100 Java 题解 -- Part 236. 二叉树的中序遍历 9437. 不同的二叉搜索树 9638. 验证二叉搜索树 9839. 对称二叉树 10140. 二叉树的层序遍历 10241. 二叉树的最大深度 10442.…...

【项目实战】IDEA常用快捷键汇总

一、修改为Eclipse的快捷键 相信很多朋友跟我一样&#xff0c; 都是习惯了eclipse的快捷键&#xff0c;没错&#xff0c;习惯这东西真的很难改&#xff01;IDEA非常强大&#xff0c;支持我们修改IDEA中的keymap为Eclipse的快捷键&#xff01;友好又贴心&#xff0c;有没有&…...

更新 TKK 失败,请检查网络连接。谷歌翻译 translation插件不能用解决办法 亲测有效

谷歌翻译无法使用&#xff0c;谷歌回应解释是&#xff0c;谷歌翻译使用率过低&#xff0c;所以选择停止服务。网上也有说法&#xff0c;指出根本原因为&#xff0c;提供API接口的googleapis被墙&#xff0c;这导致js文件和字体资源无法加载。 这里提供两种解决办法 方案一 修…...

SpringBoot整合MybatisPlus多数据源

相信在很多使用MybatisPlus框架的小伙伴都会遇到多数据源的配置问题&#xff0c;并且官网也给出了推荐使用多数据源 (dynamic-datasource-spring-boot-starter) 组件来实现。由于最近项目也在使用这个组件来实现多数据源切换&#xff0c;因此想了解一下该组件是如何运行的&…...

【教程】如何使用Java生成PDF文档?

在如今数字化时代&#xff0c;越来越多的人使用PDF文档进行信息传递和共享。而使用Java生成PDF文档也成为了一个非常重要的技能&#xff0c;因为Java作为一种通用的编程语言&#xff0c;可以在不同的操作系统和平台上运行。下面&#xff0c;我们将为您介绍如何使用Java生成PDF文…...

I.MX6ULL内核开发13:pinctrl子系统和gpio子系统-led实验

目录 一、pinctrl子系统 1.1 pinctrl子系统编写格式以及引脚属性介绍 1.1.1 iomux节点介绍 1.1.2 pinctrl子节点编写格式 1.1.3 引脚配置信息介绍 1.2 将RGB灯引脚添加到pinctrl子系统 1.2.1 查找RGB灯使用的引脚 1.2.2找到引脚宏定义 1.2.3 设置引脚属性 1.2.4 在…...

Linux系列 使用vi文本编辑器

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.vi文本编辑器 1.使用vi文本编辑器 2.vi编辑器的工作模式 3.命令模式中的…...

代码网站模板/口碑营销经典案例

第5.1节 Fcitx 输入法框架 注意 在 FreeBSD-14.0-Current 中可能会出现许多不可预料的奇怪的 bug&#xff08;fcitx5 诊断信息英文乱码&#xff0c;输入法显示出奇怪的汉字&#xff0c;fcitx5-qt5 环境不能正常加载……&#xff09;&#xff0c;如果条件允许应该在 FreeBSD-Rel…...

广东省城乡住房建设厅网站首页/月饼营销软文

1、首先进入组件服务&#xff0c;查看组件服务/计算机/我的电脑/COM应用程序&#xff0c;结果报错“COM 无法与 Microsoft 分布式事务协调程序交谈”&#xff0c;无法查看里面的对象。 2、进入事件查看器&#xff0c;发现msdtc服务没有正常启动。 3、删除注册表中的键&#xff…...

运动鞋建设网站前的市场分析/百度商家平台

在成长生活中&#xff0c;我一直在寻找能够提升自我的方法途径。我已经找到了14个最好的技巧可以帮助你更好的提升自我。其中有一些简单方法步骤你可以立即开始去做&#xff0c;还有一些更大的计划你需要更多的努力去完成。 1.每天读书。 书是智慧的源泉。你读的书越多&#xf…...

网站开发程序/seo的优点有哪些

方法&#xff1a; 菜单栏内容找到并替换/删除即可 logo也可以替换/删除...

中小企业网站建设价格/全网营销整合推广

近日&#xff0c;微软的EF团队发布了一个针对SQL Server的Sample Database Provider Entity Framework 5&#xff0c;支持EF的一些新特性。 这个新的Sample Provider支持如下EF 5的新特性&#xff1a; Spatial typesTable Valued Functions带有多个结果集的存储过程然而&#x…...

宁波网站制作首推蓉胜网络好/百度指数api

文章目录前言1.功能开关的概念2.功能开关的优点一、ASP.NET Core中间件实现1.相关依赖2.中间件代码3.在管道中的使用4.修改配置控制二、IFeatureFilter过滤器1.过滤去代码2.配置文件3.改写功能开关中间件前言 1.功能开关的概念 功能开关&#xff0c;相当于可以控制访问的流转…...