C语言——构造(结构体)
指针——内存操作
我们对于内存的操作借助于 <string.h>这个库提供的内存操作函数。
内存填充
头文件:
#include<string.h>
函数原型:
void*memset(void *s,int c,size_t n);
函数功能:
填充s开始的堆内存空间前n个字节,使得每个字节值为c
函数参数:
void*s:待操作内存首地址。
intc:填充的字节数据。
size_tn:填充的字节数。
返回值: 返回s
注意:c常常设置为0,用于动态内存初始化
内存拷贝
头文件:
#include <string.h>
函数原型:
void *memcpy(void *dest,const void *src,size_t n);适合目标地址与源地址内存无重叠的情况。
void *memmove(void *dest,const void *src,size_t n);
函数功能:拷贝src开始的堆内存空间前n个字节,到dest对应的内存中。
函数参数:
void *desk:目标内存首地址。
void *src:源内存首地址。
size_t n:拷贝的字节数。
返回值:返回dest
注意:内存中请了几个内存空间,就访问几个内存空问,否则数据不安全。注意:memcpy与memmove一般情况下是一样的,更建议使用memmove进行内存拷贝;
因为memmove函数是自适应(从后往前或者从前往后)拷贝,当被拷贝的内存和目的地的内存有重叠时,数据不会出现拷贝错误。而memcpy函数是从前往后拷贝,当被拷贝的内存和目的地内存有重叠时,数据会出现拷贝错误。
内存比较
头文件:
#include <string.h>
函数原型:int memcmp(void *dest,const void *src,size_t n)
函数功能:比较src和dest所代表的内存前n个字节的数据;
函数参数:
void *dest;目标内存首地址
const void* src;源内存首地址
size_tn;比较的字节数
返回值:
0:数据相同
>0:dest中的数据大于src<0:dest中的数据小于src
注意:
n一般和src,dest的总容量一样;如果不一样,内存比较的结果就不确定了。
内存查找
头文件:
#include <string.h>
函数原型:
int *memchr |*memrchr(const void *s,int c,size_t n)
函数功能:
在s开始的堆内存空间前n个字节中查找字节数据c
函数参数:
const void *s:待操作内存首地址;
int c:待查找的字节数据
size_t n:查找的字节数
返回值:
返回查找到的字节数据地址
注意:
如果内存中没有重复数据,memchr和memrchr结果是一样的;如果内存中有重复数据,memchr和memrchr结果就不一样;
构造类型
数据类型分类
1.基本类型
整数型
短整型: short(2个字节)
整型(默认):int(4个字节)
长整型 : long(8个字节)
长长整型 : longlong
浮点型
单精度:float(4个字节)
双精度:double(8个字节)
字符型:char(1个字节)
2.指针类型
数据类型*:int*,char*,float*等
void*:任意数据类型的指针
3.空类型
void:没有返回值或没有形参(不能定义变量)
4.自定义类型/构造类型
结构体类型:struct
共用体类型(联合体):union
枚举类型:enum
注意:整数型和字符型分有符号signed和无符号unsigned,默认是有符号,有符号可以省略关键字signed
结构体
定义:
自定义数据类型的一种,关键字struct,结构体类型的变量可以存储多个不同数据类型的数据
定义格式:
struct 结构体名
{数据类型1 成员名称1;数据类型2 成员名称2;...
}
注意:
结构体中定义的变量,我们称之为成员变量。
格式说明:
结构体名:合法的标识符,建议单词的首字母大写
数据类型n:C语言支持的所有类型
成员名称:合法的标识符,就是变量的命名标准
数据类型n 成员名称n:类似于定义变量,定义了结构体中的成员
注意:
结构体在定义的时候,成员不能赋值
常见的定义格式:
方式1:常规定义(只定义类型) ---推荐
struct Student
{int num;//学号char name[20];//姓名char sex;// 性别int age;// 年龄char address[100];//家庭住址
}
方式2:定义匿名结构体(常用于作为其他结构体的成员使用)
struct Dog
{char *name;// 姓名int age;// 年龄struct{ int year;//年int month;//月int day;// 日}birthdays;
}
注意:
定义匿名结构体的同时必须定义结构体变量,否则编译报错,结构体可以作为另一个结构体的成员
总结:
1>结构体可以定义在局部位置,也可以定义在全局位置:
2>全局位置的结构体名和局部位置的结构体名可以相同,就近原则(和普通变量的定义同理)
结构体类型的使用:
利用结构体类型定义变量,定义数组;结构体类型的使用与基本数据类型的使用类似。
结构体变量的定义
结构体变量也称为结构体的实力。
第一种
1)先定义结构体
2)然后使用struct 结构体名 变量名;
//先定义结构体(先定义结构体这个数据类型)
struct A
{int a;char b;
}// 定义结构体变量
struct A x;
struct A y;
第二种
在定义结构体的同时,定义结构体变量;
//先定义结构体(先定义结构体这个数据类型)
struct A
{int a;char b;
}x,y;
此时定义了一个结构体A,x和y是这个结构体类型的变量。
第三种:不推荐
在定义匿名结构体的同时,定义结构体变量;
struct
{int a;char b;
}x,y;struct
{int a;char b;
}z;
此时定义了一个没有名字的结构体(称为匿名结构体);y,x是这个匿名结构体类型的变量;
匿名结构体:---弊大于利(尽量少用)
优点:少写一个结构体名称
缺点:只能使用一次,定义的结构体类型的同时就必须定义变量。
应用场景:
这里————————————
结构体变量的使用
结构体变量访问结构体成员
格式:
结构体变量名,成员名;
可以通过访问给成员赋值(存数据)
可以通过访问获取成员的值(取数据)
结构体变量未初始化,结构体的成员值随机(不确定)
结构体变量在定义时,可以初始化
建议用大括号标明数据的范围
结构体成员初始化时,可以部分初始化,部分初始化时一定要带大括号标明数据的范围
结构体数组的定义
什么时候需要结构体数组?
比如:我们需要管理一个学生对象,只需要定义一个struct student majie;
假如:我们需要管理多个学生对象,此时就需要一个结构体的数组 struct student students[64];。
第一种:
先定义结构体类型,然后定义结构体变量,再将变量存储到结构体数组中
//定义一个学生类型的结构体
struct Student
{char *name;int age;float scores[3];// 三门课程的成绩
};// 定义结构体对象struct Student zhangsan ={"张三",23,{67.5,89.0,90.0}};struct Student lisi ={"李四",21,{77.0,80.0,85.0}};// 定义结构体数组struct Student student[3] = {zhangsan,lisi};
第二种:
定义结构体类型,然后定义结构体数组并初始化
// 定义一个学生类型的结构体
struct Student
{int id;char *name;int age;float scores[3];// 三门课程的成绩
};//定义结构体数组并初始化
struct Student students[3]={{1,"张三",23,{67.5,89.0,90.0}},// 注意:这里赋值的顺序需要跟成员在结构体中的顺序一致{2,"李四",21,{77.0,80.0,85.0}}
}
第三种:
定义结构体类型同时定义结构体数组并初始化
//定义一个学生类型的结构体
struct Student
{int id;char *name;int age;float scores[3];// 三门课程的成绩
}students[3]={{1,"张三",23,{67.5,89.0,90.0}},// 注意:这里赋值的顺序需要跟成员在结构体中的顺序一致{2,"李四",21,{77.0,80.0,85.0}}
};
第四种:
定义结构体类型同时定义结构体数组,然后通过索引给结构体成员赋值
//定义一个学生类型的结构体
struct Student
{int id;char *name;int age;float scores[3];// 三门课程的成绩
} sts[3];sts[0].id = 1;
sts[0].name =“张三”:
sts[0].age = 12;
sts[0].scores[0]= 98;
小贴士:
结构体数组名访问结构体成员;
格式:结构体数组名 -> 成员名
相关文章:
C语言——构造(结构体)
指针——内存操作 我们对于内存的操作借助于 <string.h>这个库提供的内存操作函数。 内存填充 头文件: #include<string.h> 函数原型: void*memset(void *s,int c,size_t n); 函数功能: 填充s开始的堆内存空间前n个字节,使得每个字节值为c…...
京东2025届秋招 算法开发工程师 第2批笔试
目录 1. 第一题2. 第二题3. 第三题 ⏰ 时间:2024/08/17 🔄 输入输出:ACM格式 ⏳ 时长:2h 本试卷还有选择题部分,但这部分比较简单就不再展示。 1. 第一题 村子里有一些桩子,从左到右高度依次为 1 , 1 2…...
模具监视器的技术参数有哪些
模具监视器的技术参数涵盖了多个方面,这些参数对于确保模具监视器的性能、稳定性和检测精度至关重要。以下是一些主要的技术参数: 一、显示器参数 屏幕尺寸:常见的模具监视器显示器尺寸为12.5英寸至13.5英寸,具体尺寸可能因不同…...
使用QGIS配置管线流向地图
一、需求概述 在管网项目中,需要进行地图配置使用QGIS显示管网的流向。 二、目标 配置一副管网地图,可以在地图上显示出每个管段的流向。 三、数据结构 管网数据: id[管线编码]source[起始节点ID]target[终点节点ID]dir[方向]1100101FT2101102FT……………………节点数据…...
白骑士的C#教学附加篇 5.1 C#开发工具
系列目录 上一篇:白骑士的C#教学实战项目篇 4.4 游戏开发 在这一部分,我们将介绍一些额外的内容和工具,以帮助您提高 C# 开发的效率和质量。掌握合适的开发工具和调试技巧,可以让您在编写和维护代码时更加高效和从容。 开发工具对…...
C++中的多线程编程和锁机制
二、多线程、锁 2.1 C语言线程库pthread(POSIX threads) 2.2.1 线程创建 pthread_create #include <pthread.h>pthread_t thread; ThreadData args {1, "Hello from parameterized thread"}; int result pthread_create(&threa…...
【投融界-注册安全分析报告】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…...
自动打电话软件给企业带来了什么?
使用机器人外呼系统肯定都是想要给自己企业带来好处和解决问题的,想让自己的企业有所改变,有更好的发展,所以才会选择使用机器人外呼系统。而它也确实没让大家失望,使用了机器人外呼系统之后确实有许多企业发生了很大改变和进步&a…...
聚鼎科技:新手做装饰画生意卖什么比较好
在艺术的广阔天地里,装饰画以其独特的魅力逐渐成为室内装饰不可或缺的元素。对于刚入行的新手而言,选择合适的装饰画产品至关重要,它关系到业务的成功与否。以下是一些关于新手做装饰画生意卖什么比较好的建议。 考虑到市场需求的多样性&…...
从零开始搭建k8s集群详细步骤
声明:本文仅作为个人记录学习k8s过程的笔记。 节点规划: 两台节点为阿里云ECS云服务器,操作系统为centos7.9,master为2v4GB,node为2v2GB,硬盘空间均为40GB。(节点基础配置不低于2V2GB) 主机名节点ip角色部…...
大模型智能体可以用来实现哪些需求?
大模型智能体可以用来实现广泛的需求,以下是一些常见的应用场景: 自然语言处理(NLP)应用 文本生成:自动撰写文章、编写代码、生成新闻摘要。 对话系统:智能客服、虚拟助手、聊天机器人。 语言翻译…...
Vue 3 组合式 API 全面讲解:defineCustomElement
Vue 3 引入的组合式 API(Composition API)为开发者提供了更加灵活和强大的代码组织能力。除了常用的 defineComponent 用于定义普通组件外,Vue 3 还提供了 defineCustomElement 函数,允许开发者定义可在 Web Components 规范下使用…...
SwiftUI 6.0(iOS 18)监听滚动视图视口中子视图可见性的极简方法
概览 在 SwiftUI 的应用开发中,我们有时需要监听滚动视图中子视图当前的显示状态:它们现在是被滚动到可见视口(Viewport)?或仍然是隐藏在“未知的黑暗”中呢? 在 SwiftUI 早期版本中为了得偿所愿,我们需要借助一些“取巧”的手段。不过,从 SwiftUI 6.0(iOS 18)开始情…...
分享五种mfc140.dll丢失如何修复?五种修复错误的详细解决办法
在Windows操作系统中,DLL(动态链接库)文件扮演着至关重要的角色,它们为应用程序提供了共享的函数和资源。其中,mfc140.dll是Microsoft Visual C 2015 Redistributable Package的一部分,对于许多使用Microso…...
MATLAB 手动实现投影密度法分割建筑物立面 (73)
专栏文章往期回顾,包含本文章 MATLAB 手动实现投影密度法分割建筑物立面 (73) 一、算法介绍二、算法实现1.代码2.效果总结一、算法介绍 从原始点云中,自动分割提取建筑物立面点云用于立面绘图,可以减少人为操作流程。这里从0开始,手动实现一种基于投影密度法的建筑物立…...
QT的基础数据类型(上)
本文将介绍几个QT中常用的数据类型 QString 是处理字符串的主要类 使用Unicode编码,每个字符是16位的QChar 初始化 QString的初始化方法有以下几种: //字符串常量初始化QString str1 = "Hello, World! str1";//使用构造函数初始化QString str2("Hello, Wo…...
【系统分析师】-综合知识-系统架构
1、设计模式 1)观察者模式定义了对象间的一种一对多依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新【消息订阅】。在该模式中,发生改变的对象称为观察目标,被通知的对象称为观察者&…...
华为AR1220配置GRE隧道
1.GRE隧道的配置 GRE隧道的配置过程,包括设置接口IP地址、配置GRE隧道接口和参数、配置静态路由以及测试隧道连通性。GRE隧道作为一种标准协议,支持多协议传输,但不提供加密,并且可能导致CPU资源消耗大和调试复杂等问题。本文采用华为AR1220路由器来示例说明。 配置…...
前端面试题-什么是JavaScript的闭包?有哪些应用场景?
定义: 一个函数能够访问其它函数内部定义的变量 形成的原理: (1)函数创建:在一个函数(外部函数)中定义另一个函数(内部函数)。 (2)内部函数访问:内部函数可以访问和修改外部函数中的局部变量。 (3)函数…...
Xilinx XAPP585相关
XAPP585中相关的状态机 第一个状态机:这里主要是在对时钟线延迟的基础上,通过BITSLIP操作,做时钟的对齐; 第二个状态机:这里对c_delay_in所做的操作,主要是对时钟线的延迟进行控制; delay_con…...
Java实现腾讯云人脸识别集成:如何为司机创建人脸模型
文章目录 一、场景介绍二、实现步骤三、代码解析四、总结 在现代的开发过程中,我们经常需要集成各种云服务来增强应用的功能。今天,我想和大家分享一个在Java中集成腾讯云人脸识别的实际案例——为司机创建人脸模型。这个功能通常用于司机管理系统中&…...
微信小程序电话号码授权
前端: 文档:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html uniapp调用的时候,要将bind用替换 <button open-type"getPhoneNumber" getphonenumber"getPhoneNumber"…...
vue3 响应式 API:ref() 和 reactive()
在 Vue 3 中,响应式系统是其核心特性之一,它使得数据的变化能够自动触发视图的更新。 官方文档: 响应式 API:核心 要更好地了解响应式 API,推荐阅读官方指南中的章节: 响应式基础 (with the API preference…...
英智金融行业AI Agent,在金融领域全场景下的业务创新与应用实践
随着全球经济的数字化转型,金融行业也在迅速演变。传统的金融服务已经无法完全满足现代客户对快速、个性化和高效服务的需求。与此同时,市场竞争的加剧、监管环境的变化以及客户期望的提升,促使金融机构不断寻求新的技术来优化运营效率、提升…...
hyper-v安装window10操作系统
Hyper-V是微软的一款虚拟化产品,是微软第一个采用类似Vmware ESXi和Citrix Xen的基于hypervisor的技术。 目标:在window10的物理机上基于hyper-v运行虚拟window10。 准备条件 准备好window10操作系统,iso、wim、esd等都行,我这…...
华三(H3C)UIS3030 Uni-R4900服务器硬件监控指标解读
随着企业信息化建设的不断深入,服务器作为IT架构的核心组成部分,其稳定性和性能直接影响到业务的连续性和用户体验。为了保障服务器的稳定运行,监控易作为一款专业的监控软件,为华三(H3C)UIS3030和Uni-R490…...
opencv 控制鼠标键盘实现功能setMouseCallback
鼠标事件类型 OpenCV 支持多种鼠标事件类型,常见的包括: cv2.EVENT_LBUTTONDOWN:左键按下 cv2.EVENT_RBUTTONDOWN:右键按下 cv2.EVENT_MBUTTONDOWN:中键按下 cv2.EVENT_LBUTTONUP:左键释放 cv2.EVENT_RBUTT…...
【傅里叶分析】复数基础知识
【傅里叶分析】复数基础知识 复数复数的几何意义与点的对应与向量的对应 复数与极坐标辐角与辐角主值三角函数 参考文献 本文参考了网上的其他文章,已在文末参考文献中列出;如有侵权,请联系我删除。 复变函数是傅里叶分析的基础,而…...
从【人工智能】到【计算机视觉】,【深度学习】引领的未来科技创新与变革
前几天偶然发现了一个超棒的人工智能学习网站,内容通俗易懂,讲解风趣幽默,简直让人欲罢不能。忍不住分享给大家,点击这里立刻跳转,开启你的AI学习之旅吧! 前言 – 人工智能教程https://www.captainbed.cn/l…...
基于YOLOv10深度学习的草莓成熟度检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、人工智能
《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…...
log4j日志配置%X{TransId}
log4j日志配置文件中的%X{TransId}是怎么动态获取值的 在Log4j中,%X{TransId} 是用来从MDC(Mapped Diagnostic Context)中获取值的占位符。MDC 是 Log4j 提供的一种机制,用于在同一个线程的不同日志记录中传递上下文信息。通过 M…...
PHP模拟高并发异步请求测试+redis的setnx处理并发和防止死锁处理
/** PHP并发异步请求测试* /test/curlMulti*/public function curlMultiAction(){$urls ["http://localhost:801/api/order/create","http://localhost:801/api/order/create","http://localhost:801/api/order/create","http://localhos…...
访问网站出现“此站点不安全”如何解决
在网络浏览中,我们经常会遇到浏览器地址栏出现“此站点不安全”的警告。这通常意味着网站没有使用SSL(安全套接层)加密来保护用户数据的安全。那么,如何通过获得并安装SSL证书来消除这一警告,确保网站的安全可靠呢&…...
同一台电脑同时连接使用Gitee(码云)和Github
1、添加对应的密钥 ssh-keygen -t rsa -C "your_emailexample.com" -f ~/.ssh/github_id-rsa //生成github秘钥 ssh-keygen -t rsa -C "your_emailexample.com" -f ~/.ssh/gitee_id-rsa //生成码云秘钥 2、在 ~/.ssh 文件里会生成对应的文件 文件夹里会…...
GORM 插入和批量插入操作介绍
GORM 是一个功能强大的 Go 语言 ORM 库,它提供了简单易用的 API 来执行数据库操作。本文将介绍如何使用 GORM 进行单条记录插入和批量插入操作。 单条记录插入 在 GORM 中,插入一条记录非常简单。首先,你需要定义一个模型,该模型…...
企业CAD图纸加密软件推荐!2024年好用的10款CAD图纸加密软件排行
在现代企业中,CAD图纸作为重要的设计和工程数据,其安全性和保密性至关重要。为了防止图纸被非法获取、篡改或滥用,选择一款高效的CAD图纸加密软件显得尤为重要。本文将为您推荐2024年市场上十款好用的CAD图纸加密软件,帮助企业保护…...
智能电梯标志新时代:墨水屏电子标签引领变革
电梯安全墨水屏标签的智能设备悄然出现在各大写字楼和住宅区的电梯中,引发了广泛关注。这款设备替代了传统的纸质电梯标志,通过手机蓝牙标签APP直接进行编辑刷新内容,并具备Type-C接口充电功能。 本文将深入探讨这一创新技术的应用前景及其对…...
使用nvm下载nodejs版本报错
这里写自定义目录标题 使用nvm下载nodejs版本报错:Error retrieving "http://npm.taobao.org/mirrors/node/latest/SHASUMS256.txt": HTTP Status 404问题原因解决办法 使用nvm下载nodejs版本报错:Error retrieving “http://npm.taobao.org/m…...
深入理解CSS的:valid和:invalid伪类:增强表单验证的艺术
在现代网页设计中,用户输入验证是一个重要的环节,它不仅关乎用户体验,也是数据准确性和安全性的保障。CSS3引入了两个强大的伪类选择器::valid和:invalid,它们允许开发者通过CSS来增强表单输入的验证过程,而…...
稚晖君发布5款全能人形机器人,开源创新,全能应用
8月18日,智元机器人举行“智元远征 商用启航” 2024年度新品发布会,智元联合创始人彭志辉主持并发布了“远征”与“灵犀”两大系列共五款商用人形机器人新品——远征A2、远征A2-W、远征A2-Max、灵犀X1及灵犀X1-W,并展示了在机器人动力、感知、…...
【总结】冲击偶的概念与性质
冲击偶的概念与性质...
Hbase图形化界面
分享一个好用的hbase图形化界面 安装包:链接: https://pan.baidu.com/s/11Y2cDlme-P2xe--pYqy6MQ?pwdguag 提取码: guag 1、上传项目到linux 2、修改数据库配置信息 application-druid.yml 修改url、username、password为数据库连接信息 3、创建数据库(注意字符集…...
PhalApi:在宝塔一键安装部署PHP开源接口框架的教程
如何在宝塔上,一键安装部署PhalApi开源接口框架? 第一步,进入你的宝塔 - 软件商店。 第二步,切换到:一键部署; 第三步,搜索 phalapi; 第四步,点击 一键部署࿱…...
什么是BERT?工程快速入门
基本介绍 全称是Bidirectional Encoder Representations from Transformers。BERT翻译成中文通常被称为“双向编码器表征法”或简单地称为“双向变换器模型” Bidirectional:是双向神经网络,这个在学习 RNN 时候我们就了解到如何使用双向 RNN 让每一个…...
SQL - 事务
事务是代表单个工作单元的一组SQL语句,当我们需要对数据库进行多次更改的情况下,要使用事务,我们希望所有这些更改作为一个单元一起成功或失败事务属性 (ACID) 原子性(Atomicity):事务中的所有操作要么全部完成,要么全…...
系统, 安装完以后只能进ubuntu
1.问题 在已经安装了Windows10系统的情况下,用U盘安装Ubuntu 16.04双系统, 安装完以后只能进ubuntu,在grub系统选择界面,Windows10操作系统的选项都没有。 2.解决办法 进入ubuntu系统,打开终端输入: sudo update-g…...
闲鱼功能全解析:闲置物品快速变现
咸鱼(现已更名为闲鱼)作为一款闲置交易平台,其功能设计旨在提供一个方便、安全的环境,让用户能够轻松地买卖二手物品。以下是对咸鱼(闲鱼)功能的详细分析 1. 商品发布与管理 商品发布:用户可以…...
牛客网SQL进阶129 :月均完成试卷数不小于3的用户
月均完成试卷数不小于3的用户爱作答的类别_牛客题霸_牛客网 0 问题描述 基于试卷作答记录表exam_record、试卷信息表examination_info ,统计出 “月均完成试卷数”不小于3的用户作答的类别及作答次数,按次数降序输出。 1 数据准备 drop table if exis…...
Astro + Cloudflare Pages 快速搭建个人博客
目录 1 选择 Astro 模板2 使用代码3 修改代码4 上传 Github5 部署 Cloudflare Pages6 后续修改 最近我搭建完了我的个人网站,很多人问是怎么做的,今天就来写一篇教程吧。 全部干货,看完绝对能成功搭建自己的网站!(还不…...
Vue中<style scoped>与<style module>的深入解析与应用
在Vue开发中,样式管理是一个重要的环节。Vue提供了多种方式来帮助开发者更有效地管理组件样式,其中<style scoped>和<style module>是两个非常实用的特性。本文将深入探讨这两个属性的作用、原理以及使用场景,帮助读者更好地理解…...