浙江职业能力建设网站知乎 wordpress 博客

news/2025/10/3 5:02:53/文章来源:
浙江职业能力建设网站,知乎 wordpress 博客,易店无忧官网,南昌新建网站建设个人主页#xff1a;PingdiGuo_guo 收录转栏#xff1a;C干货专栏 前言 本篇博客是讲解关于C内存的一些知识点的。 文章目录 前言 1.内存函数 1.1memcpy函数 1.2memmove函数 1.3 memset函数 2.各数据类型占用 2.1bool类型 2.2char类型 2.3short、int、long类型及整数… 个人主页PingdiGuo_guo 收录转栏C干货专栏 前言 本篇博客是讲解关于C内存的一些知识点的。 文章目录 前言 1.内存函数 1.1memcpy函数 1.2memmove函数 1.3 memset函数 2.各数据类型占用 2.1bool类型 2.2char类型 2.3short、int、long类型及整数 2.4float类型及double类型及浮点数 3.学习内存有什么用 总结 1.内存函数 内存函数是在计算机程序中用来操作内存的一类函数。内存函数可以用于分配和释放内存读取和写入内存中的数据以及进行内存的复制和移动等操作。 在这里我们主要介绍几种可以复制的内存函数。 1.1memcpy函数 memcpy函数是C中的一个标准库函数用来实现内存拷贝操作。它的原型如下 void *memcpy(void *dest, const void *src, size_t n); 在C中也可以使用内存拷贝操作来复制数组元素。C提供了memcpy函数它与C的memcpy函数功能相同但被包含在std命名空间中。 下面是使用memcpy实现数组元素拷贝的示例代码 #include iostream #include cstringusing namespace std;int main() {int srcArray[] {1, 2, 3, 4, 5};int destArray[5];// 使用memcpy函数拷贝数组元素memcpy(destArray, srcArray, sizeof(srcArray));// 思考sizeof(srcArray)是什么这个函数拷贝拷贝了多少元素memcpy(destArray, srcArray,20);//思考这里可以拷贝多少元素//思考这里是谁拷贝的谁// 打印目标数组的元素for (int i 0; i sizeof(destArray) / sizeof(destArray[0]); i) {cout destArray[i] ;}return 0; } 1.sizeof(srcArray)是srcArray数组的字节大小即sizeof(int) * 5所以sizeof(srcArray)是20。 2.这个函数拷贝了5个元素。因为memcpy函数根据参数指定的字节数进行拷贝sizeof(srcArray)指定了srcArray数组的字节大小所以拷贝了整个srcArray数组的元素。 3.第二个memcpy函数使用了20作为拷贝的字节数。因为是5每个int占4个字节所以这个函数可以拷贝5个元素。 4.这里是destArray拷贝了srcArray数组。 memcpy函数在处理内存重叠问题时是未定义行为。也就是说如果源内存块和目标内存块重叠memcpy函数可能会导致不可预测的结果。 输出结果 1.2memmove函数 memmove与memcpy类似但不同的地方是memmove是可以处理内存块的重叠的。它的函数原型为 void *memmove(void *dest, const void *src, size_t count);拷贝数组 #include bits/stdc.h using namespace std; int main() {int arr1[] { 1,2,3,4,5,6,7,8,9,10};memmove(arr12, arr1, 20);for (int i 0; i 10; i){coutarr1[i] ;}return 0; } 输出结果 这里出现了一个问题那就是内存重叠了。 那么我们如何处理这个内存重叠问题呢 我们可以检查它们的内存是否重叠。 如果是那我们就直接从后往前拷贝否则我们就从前往后拷贝。 图示 srcsrc 是 memory source 的缩写表示源地址即需要被复制的内存块的起始位置。 destdest 是 destination 的缩写表示目标地址即复制后的内存块的起始位置。 代码 // 自定义 memmove 函数解决内存重叠问题 void* me(void* d, const void* sr, size_t n) {void* ret d;if (d sr || (char*)d ((char*)sr n)) {// 从前往后while (n--) {*(char*)d *(char*)sr;d (char*)d 1;sr (char*)sr 1;}} else {// 从后往前d (char*)d n - 1;sr (char*)sr n - 1;while (n--) {*(char*)d *(char*)sr;d (char*)d - 1;sr (char*)sr - 1;}}return ret; }1.3 memset函数 memset函数式将指定大小的内存块设置为给定的值。它的函数原型为 void * memset ( void * ptr, int value, size_t num); 使用 #include iostream #include cstring using namespace std; int main() {char str[10];// 将str的前5个字节设置为字符 Amemset(str, A, 5);cout str endl; // 输出 AAAAAreturn 0; }运行结果 2.各数据类型占用 我们可以用sizeof(数据类型)格式来计算个数据类型的占用内存大小。这里我们要了解一个知识点 字节是计算机中的最小存储单位通常用来表示一个字母、一个数字或者一个符号。一个字节等于8个二进制位即8个0或1。字节是计算机中信息存储和传输的基本单位用来表示各种数据类型和文件大小。 二进制位是计算机中的最小计数单位用于表示数字的最基本形式。二进制位只能是0或1两种状态用于表示八进制、十进制、十六进制等不同进制数系统的数值。计算机中的所有数据都是以二进制位的形式存储和处理的二进制位的组合可以表示各种不同的数值和字符。8个二进制位组合在一起形成一个字节即8位二进制位表示一个字节的数据。 2.1bool类型 代码 coutsizeof(bool)endl; 占用一字节。 解释 bool类型占用内存是一个字节。虽然大家可能觉得bool类型的取值范围只有true和false两种占用内存应该很小但是为了在内存中存储和处理bool类型的值需要用一个字节来表示。这是因为计算机在内存中最小的存储单元就是一个字节无法将一个布尔值存储在更小的存储单元中。因此无论bool类型的值占用的实际位数是多少它始终会占用1个字节的内存空间。 2.2char类型 代码 coutsizeof(char)endl; 占用一个字节及八位二进制位图表 1/01/01/01/01/01/01/01/0 其中每一个二进制位的变化都可以表示一个不同的值也就是2^8256个值只是当有符号和无符号时表示的范围并不相同我们平时的所用的每一个字符在内存中都由8位2进制位来表示。 比如字符A在ASCLL码中对应65在内存则表示为 01000001 2.3short、int、long类型及整数 short、int、long类型都是储存整数的所以放到一块讲了。 short类型 coutsizeof(short)endl; 占用二字节也就是十六位二进制位可以表示2^1665536个值。 int类型 coutsizeof(int)endl; 占用四字节三十二位二进制位可以表示2^324294967296个值。 long类型 coutsizeof(long)endl; 也是占用四字节表示三十二位二进制位可以表示2^324294967296个值和int类型一样。 整数 整数的存储都是由原码、反码、补码来表示的 对于整数 1. 原码只要通过正负数判断即可获得原码正数1负数0 2. 反码在原码的基础上对负数的各位取反。 3. 补码在反码的基础上对负数的最低有效位加1。即将反码符号位除外加1得到补码。 注正整数的原、反、补码是相同的。 在计算机内存中整数通常用二进制补码的形式来储存。为什么呢 因为计算机中通过补码运算可以实现加法、减法、乘法和除法等操作。在进行运算时计算机会自动进行补码的转换和处理。 2.4float类型及double类型及浮点数 因为float和double都是储存浮点数的所以归为一类了。 float类型 代码 coutsizeof(float)endl; 占用四字节三十二位二进制位。 这里需要了解一个表示方式就是二进制的科学表示法 ± mantissa × 2 exponent mantissa尾数exponent指数均使用二进制表示 它的储存采用了IEEE 754单精度浮点格式存储方式如下 1 bit符号位 8 bit指数位 23 bit尾数位 00  1  1  1  1  1  0  0  00  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  03031                              2322                                                                                         0 这里的bit也是二进制位是二进制位的缩写。如上图所示该格式最高一位是符号位0位正1位负后面8位为无符号整型数表示范围为0~265后面23位小数为索引从22到0分别对应2^-1到2^-23。 double类型 代码 coutsizeof(double)endl; double型在内存中有八个字节储存的数据较大六十四位二进制位bit。他和float类型一样都是采用的二进制的科学计数法。 它的储存采用了IEEE 754双精度浮点格式储存方式如下 1 bit符号位 11 bit指数位 52 bit尾数位 第一位为63倒数第一位为52 倒数第一位为0 如上图所示该格式最高位也为符号位0位正1位负后面11位为无符号整型数表示范围为0~2^11-1后面52位小数为索引从51到0分别对应2^-1到2^-52。 浮点数 浮点数的储存方式可看上面的两张图表接下来讲一下浮点数如何转化为二进制。 步骤 1. 将浮点数分为整数部分和小数部分。例如考虑浮点数12.375整数部分为12小数部分为0.375。 2. 将整数部分转化为二进制。对于整数部分可以使用短除法将其转化为二进制。例如12转化为二进制是1100。对于短除法这里就不过多讲述了大家可以去查一查。 3. 将小数部分转化为二进制。对于小数部分可以使用乘2取整法将其转化为二进制。将小数部分乘以2取整数部分然后将小数部分的整数部分再乘以2依此类推直到小数部分为0或达到所需的精度。例如0.375转化为二进制的过程如下      0.375 x 2 0.75 - 0//整数部分为0继续乘20.75 x 2 1.5 - 1//整数部分为1舍弃整数部分继续乘20.5 x 2 1.0 - 1//乘得积为1停止运算     所以0.375转化为二进制是0.011。 4. 合并整数部分和小数部分的二进制。将步骤2和步骤3得到的二进制合并在一起注意小数点的位置。对于上述例子合并后的二进制是1100.011。 5.  二进制小数转化为十进制验算。比如二进制小数1100.0111*2^20*2^21*2^2(0 * 2^-1) (1 * 2^-2) (1 * 2^-3) 12.375正确。 3.学习内存有什么用 大家可能会有一些疑问学内存知识有什么用呢学内存有以下几个方面的作用 1. 内存管理C是一种低级语言需要手动管理内存分配和释放。了解C内存知识可以帮助我们正确地分配和释放内存避免内存泄漏和野指针等问题提高程序的健壮性和效率。 2. 优化性能理解C内存模型和内存使用方式可以帮助我们优化程序性能。例如了解内存对齐和缓存行的概念可以避免访问内存的延迟提高程序的运行速度。 3. 安全性和稳定性内存相关的错误往往是导致程序崩溃和漏洞的主要原因之一。学习C内存知识可以帮助我们避免常见的内存错误提高程序的安全性和稳定性。 4. 调试和错误排查当程序出现内存相关的问题时了解C内存知识可以帮助我们更快地定位和修复问题提高调试的效率。 总的来说学习C内存知识对于使用和开发C程序非常重要可以帮助我们进行内存管理、优化性能、提高安全性和稳定性深入理解语言特性以及进行调试和错误排查。 总结 本篇博客到这里就结束了感谢大家的支持与观看有好的建议欢迎留言如果这篇博客对您有帮助那请给PingdiGuo_guo一个免费的赞谢谢大家啦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/925545.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

创办网站网站更换服务器要重新备案吗

C# WinForm中获取当前程序运行目录的方法: “AppDomain.CurrentDomain.BaseDirectory”:获取当前应用程序所在目录的路径,最后包含“\”;“System.Threading.Thread.GetDomain().BaseDirectory”:获取当前应用程序所在目录的路径&#xff0c…

做国外贸易哪个网站好建英语网站

今天在CSDN上看了一篇的文章,感觉自己实在是太菜了,以至于对毕业之后从事IT行业没有了任何信心。现在也不清楚,自己能否在it行业混下去。自己的技术实在是一个水啊。8号就要回家了,兄弟姐妹们如果有事情,请发短信至 15…

武进网站建设代理商建设网站优点

文章目录 1. 直接把请求参数写在方法的形参中2. 封装一个bean直接来接收3. 原生的HttpServletRequest接收4. PathVariable获取rest风格路径参数5. RequestParam绑定请求参数到方法形参6. RequestBody绑定请求参数到方法形参7. RequestHeader8. CookieValue 1. 直接把请求参数写…

网站空间不够用c2c网站管理系统

【FPGA开发/IC开发之时序约束最全面的归纳总结】时序路径基本概念及时序约束分析方法_时序约束指令-CSDN博客

廊坊网站排名方案口碑好的网站推广价格

1 Arrow简介 Arrow 是一个被称为程序员的时间处理利器的 Python 库。 从诞生起,它就是为了填补 Python 的 datetime 类型的功能空白而生的。为程序员提供了一种更简单、更直观的方式来处理日期和时间。 2 安装Arrow库 pip install arrow -i https://pypi.tuna.ts…

上文明网站 做文明网民征文wordpress 评论弹幕

参考链接 https://my.oschina.net/jfinal/blog/215624?fromerrZTZ6c38X 转载于:https://www.cnblogs.com/eat-too-much/p/11318085.html

重新建设网站的申请报告遵义花果园网站建设

在现代Web应用程序开发中,前后端分离是一种常见的架构模式。这种模式将前端(用户界面)和后端(业务逻辑和数据处理)分开独立开发和部署,从而提高开发效率、代码的可维护性和团队协作能力。本文将介绍Java前后…

学校机构网站建设内容建筑人才招聘

8.2 BA 与图优化 Bundle Adjustment 是指从视觉图像中提炼出最优的 3D 模型和相机参数(内参和外参)。 8.2.1 相机模型和 BA 代价函数 我们从一个世界坐标系中的点 p \boldsymbol{p} p 出发,把相机的内外参数和畸变都考虑进来,…

5g天天奭5g天天运动网站代码如何做网站聚合页

473. Matchsticks to Square 思路:有n根长度不一的火柴,这些火柴可以拼接在一起,但不能被折断。这些火柴能够围城一个正方形吗?每个火柴可以并且必须使用一次。分析得到每个边的长度应该是所有火柴长度和的1/4。接下来就是将火柴…

做淘客需要网站网站建设专业术语

pwd - 显示当前工作目录的路径 cd - 切换工作目录,ls - 列出当前目录的文件和子目录 rm - 删除文件或目录 mkdir - 创建新目录 rm - 删除目录 nano/vi - 编辑文本文件,按Enter键进入 之后按i键就可以进入写入模式 之后输入文字以后按Esc键与:q就不保…

电影网站建设的核心是微信网站开发之前要学会什么

前置条件: 创建库:MySQL基本操作之创建数据库-CSDN博客 创建表:MySQL基本操作之创建数据表-CSDN博客 目录 常规查询常用函数union查询一、常规查询 普通的查询方式 1、查询所有姓名以 "张" 开头的学生: SELECT * FROM student WHERE name LIKE 张%; 这条语…

宁波网站搭建定制非模板网站建设海鲜网站开发目的在于

适用于英特尔 千兆位以太网网络连接的 Linux* igb* 基础驱动程序安装说明Linux* igb 驱动程序支持所有基于 82575、82576、82580,I350,I354 和 I210/I211 的英特尔 千兆位以太网网络连接。有关驱动程序配置的详细信息,请参阅下载中心中的自述…

做网站的复式照片宁波网络推广丿易企网怎么样

题目描述 评估一个网络的信号质量,其中一个做法是将网络划分为栅格,然后对每个栅格的信号质量计算。 路测的时候,希望选择一条信号最好的路线(彼此相连的栅格集合)进行演示。 现给出 R 行 C 列的整数数组 Cov,每个单元格的数值 S 即为该栅格的信号质量(已归一化,无单…

深圳网站设计联系电话wordpress使用不同的页头

本文作者:dinya内容摘要:在开发过程,经常遇到一些将表的显示方式进行转换的需求,我们习惯性称之为竖表到横表的转换,本文通过一个例子来简要说明常见的两种竖表转横表的问题。本文适宜读者范围:oracle初级&…

上海网站开发团队网站建设情况汇报

一、背景 1、背景信息 现有湖仓一体架构是以 MaxCompute 为中心读写 Hadoop 集群数据,有些线下 IDC 场景,客户不愿意对公网暴露集群内部信息,需要从 Hadoop 集群发起访问云上的数据。本文以 EMR (云上 Hadoop)方式模…

网站建设书店用户分几类教你做面膜v官方网站

如果拿下了一台机器之后寻找域控机器 ipconfig /all 找到域名 ping 域名或者nslookup域名

域名通过了才可以做网站吗长垣县做网站的

简单的介绍下Struts2中的几个简单的问题(namespace、action、以及path问题) namespace(命名空间) Namespace决定了action的访问路径,默认为“”,意味着可以访问所有目录下的/ass/sss/ss/index;囊括了所有pa…

响水企业做网站多少钱网络服务器租用

效果图:最左侧的分类列是跟随甘特图滚动的,因为这一列如果需要自定义,比如表格的话可能会存在行合并的情况,这个时候甘特图是没有办法做的,然后甘特图的表头又需要做滚动时固定,所以设置了甘特图滚动时&…

容桂网站建设济南黄河路桥建设集团官方网站

项目作者:小华的物联网嵌入式之旅 介绍:从事电气自动化行业,多次获得物联网设计竞赛,爱好嵌入式设计开发,物联网开发。 设计方案思路的由来,是因为我们现在的开发板基本需要通过串口与WIFI模组或以太网模…

做seo必须有自己网站吗wordpress图片上传卡住

绿*泡*泡: neituijunsir 交流裙 ,内推/实习/校招汇总表格 1、自动驾驶一周资讯 - 理想汽车发布第三季度财报;小米汽车现身工信部公告;小鹏汽车Q3营收超85亿元;11月前两周新势力销量排行榜 自动驾驶一周资讯 - 理想…