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

初学c语言16(内存函数)

1.memcpy

形式:

功能:完成内存块拷贝(所以可拷贝任何类型的数据)

过程:从source开始拷贝num个字节的数据到destination指向的空间里

返回值:返回目标空间的起始地址

应用:

模拟实现:

代码:

#include <stdio.h> 
void* my_memcpy(void* des, const void* src, size_t num)
{char* ret = (char*)des;while (num--){*(char*)des = *(char*)src;((char*)des)++;((char*)src)++;}return ret;
}
int main()
{float arr[] = { 1.1f,3.3f,2.2f,4.4f};float arr1[20] = { 0 };my_memcpy(arr1, arr, 8);return 0 ;
}

注意:

该模拟实现的函数不可以处理重叠的部分

例子:

原因:重叠部分拷贝过程中被改为1,2了

二.memmove

形式:与memcpy一样

差异:memmove处理的源内存块和目标内存块是可以重叠的

应用:

注意:

memcpy也可以完成

模拟实现:

代码:

#include <stdio.h>  
void* my_memmove(void* des, const void* src, size_t num)
{char* ret = des;while (num--){if (des < src){*(char*)des = *(char*)src;des = (char*)des + 1;src = (char*)src + 1;}else{*((char*)des + num) = *((char*)src + num);}}return ret;
}
int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9,10 };my_memmove(arr+2, arr, 20);return 0 ;
}

结果和解释:

三.memset

形式:

功能:设置内存块的内容,将内存中指定宽度设置特定的内容

头文件:string.h

参数:

ptr:地址,为要设置内存块的起始地址

value:为要设置的特定的内容,但会将value值转换为unsigned char类型的数据进行设置,是以字节为单位设置内存的

num:设置内存的长度,单位字节

返回值:为要设置内存块的起始地址

应用:

注意:

这里不能将所有元素改为1,因为value是以字节为单位设置的

四.memcmp

形式:

功能:比较指定的俩块内存块内容

参数:

ptr1、ptr2:指针,指向待比较内存块

返回值:和strcmp一样

应用:

相关文章:

  • 【Fine-Tuning】大模型微调高阶技术点概要
  • 【Unity】Unity中将字典序列化
  • YOLO模型predict(预测/推理)的参数设置
  • Java集合框架解析:从基础到底层源码
  • 题目练习之综合运用
  • 【PhysUnits】4.4 零类型(Z0)及其算术运算(zero.rs)
  • 《解锁具身智能社交密码:文化适配算法探秘》
  • 小目标检测层优化+多模态数据增强——YOLOv5在油气管道环焊缝缺陷识别的创新应用
  • SymPy | 隐函数导数求解:从基础到高阶的完整指南
  • 卓力达手撕垫片:精密制造的创新解决方案与多领域应用
  • docker运行Redis
  • 基于DeepSeek的智能客服系统实践与创新
  • 【Game】Powerful——Punch and Kick(12)
  • C+++STL(一)
  • Linux 内核等待机制详解:prepare_to_wait_exclusive 与 TASK_INTERRUPTIBLE
  • 反射操作注解的详细说明
  • 网络漏洞扫描系统都有着什么作用?
  • 图漾相机错误码解析(待补充)
  • 三种嵌入式开发常用的组网方式
  • Unity开发:预制体、接口与枚举
  • 上影节官方海报公布:电影之城,每一帧都是生活
  • 钟南山谈新冠阳性率升高:可防可治不用慌,高危人群应重点关注
  • “80后”湖南岳阳临湘市市长刘琦任临湘市委书记
  • 张核子“限高”次日即被解除,前员工的执行款3个月后仍未到账
  • 人民日报任平:从“地瓜经济”理论到民营经济促进法,读懂中国经济的成长壮大之道
  • 莱布雷希特专栏:古典乐坛边缘人