C语言内存函数讲解

目录

文章目录

内存函数针对的数据类型不确定可能是整型数据,字符数据,结构体数据......

memcpy的使用和模拟实现

 memcpy的使用

memcpy打印字符数据

 memcpy打印整型数据

 memcpy的模拟实现

 模拟实现的memcpy打印重叠情境

 memmove的使用和模拟实现

 memmove的使用

 memove的模拟实现

 memset函数的使用和模拟实现

 memset的使用

 memset的模拟实现

 memcmp的使用和模拟实现

memcmp的使用

 memcmp的模拟实现



内存函数针对的数据类型不确定可能是整型数据,字符数据,结构体数据......

memcpy的使用和模拟实现

我们先看一下菜鸟教程中对memcpy的解释

 

 void *memcpy(void *str1, const void *str2, size_t n)

 memcpy的使用

memcpy打印字符数据

#include <stdio.h>
#include <string.h>
int main()
{char arr[100] = { 0 };char arr2[50] = "woshi shuaige";memcpy(arr, arr2, 7);int i = 0;for (i = 0; i < 7; i++){printf("%c", arr[i]);}return 0;
}

 

 memcpy打印整型数据

#include <stdio.h>
#include <string.h>
int main()
{int arr[100] = { 0 };int arr2[50] = {1,2,3,4,5,6,7,8,9,10};memcpy(arr, arr2, 20);int i = 0;for (i = 0; i < 5; i++){printf("%d ", arr[i]);}return 0;
}

 memcpy最好不要处理重叠的内存,对于重叠的内存,我们交给memmove来处理

 memcpy的模拟实现

#include <stdio.h>
#include <assert.h>
void* mymemcpy(void* str1, const void* str2, size_t n)
{void* ret = str1;assert(str1, str2);while (n--){*(char*)str1 = *(char*)str2;str1 = (char*)str1 + 1;str2 = (char*)str2 + 1;}return ret;
}
int main()
{char arr[100] = { 0 };char arr2[50] = "woshi shuaige";mymemcpy(arr, arr2, 7);int i = 0;for (i = 0; i < 7; i++){printf("%c", arr[i]);}return 0;
}

 模拟实现的memcpy打印重叠情境

void* mymemcpy(void* str1, const void* str2, size_t n)
{void* ret = str1;assert(str1, str2);while (n--){*(char*)str1 = *(char*)str2;str1 = (char*)str1 + 1;str2 = (char*)str2 + 1;}return ret;
}
int main()
{int arr[50] = {1,2,3,4,5,6,7,8,9,10};mymemcpy(arr+2, arr, 20);int i = 0;for (i = 0; i < 10; i++){printf("%d ", arr[i]);}return 0;
}

 

 memmove的使用和模拟实现

 

 void * memmove ( void * destination, const void * source, size_t num );

 memmove的使用

#include <stdio.h>
#include <string.h>
int main()
{int arr[50] = {1,2,3,4,5,6,7,8,9,10};memmove(arr+3, arr, 20);int i = 0;for (i = 0; i < 10; i++){printf("%d ", arr[i]);}return 0;
}

 

 memove的模拟实现

 


#include <stdio.h>
#include <assert.h>
void* mymemmove(void* destination, const void* source, size_t num)
{void* ret = destination;assert(destination && source);if (destination < source){while (num--){*(char*)destination = *(char*)source;destination = (char*)destination + 1;source = (char*)source + 1;}}else{while (num--){*((char*)destination + num) = *((char*)source + num);}}return ret;
}
int main()
{int arr[50] = { 1,2,3,4,5,6,7,8,9,10 };mymemmove(arr+2, arr, 20);int i = 0;for (i = 0; i < 10; i++){printf("%d ", arr[i]);}return 0;
}

 memset函数的使用和模拟实现

 

 

 void * memset ( void * ptr, int value, size_t num );

 memset的使用

#include <stdio.h>
#include <string.h>
int main()
{char arr[50] = "woshi shuaige";memset(arr, 'x', 6);printf("%s", arr);return 0;
}

 

 注意memset在设置的时候,是以字节为单位来设置的。

 memset的模拟实现

#include <stdio.h>
void* mymemset(void* ptr, int value, size_t num)
{void* ret = ptr;int i = 0;for (i = 0; i < num; i++){*((char*)ptr + i) = 'x';}return ret;
}
int main()
{char arr[50] = "woshi shuaige";mymemset(arr, 'x', 5);printf("%s", arr);return 0;
}

 

 memcmp的使用和模拟实现

 

 

 

 int memcmp ( const void * ptr1, const void * ptr2, size_t num );

memcmp的使用

#include <stdio.h>
#include <string.h>
int main()
{char arr[100] = "woshi shuaige";char arr1[50] = "woshi shuaibi";int ret=memcmp(arr, arr1, 12);printf("%d\n", ret);return 0;
}

 memcmp的模拟实现

#include <stdio.h>
int mymemcmp(const void* ptr1, const void* ptr2, size_t num)
{while (num--){if (*(char*)ptr1 > *(char*)ptr2){return 1;}else if (*(char*)ptr1 < *(char*)ptr2){return -1;}else{ptr1 = (char*)ptr1 + 1;ptr2 = (char*)ptr2 + 1;}}return 0;
}
int main()
{char arr[100] = "woshi shuaige";char arr1[50] = "woshi shuaibi";int ret = mymemcmp(arr, arr1, 12);printf("%d\n", ret);return 0;
}

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

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

相关文章

VR远程带看,助力线下门店线上化转型“自救”

VR远程带看&#xff0c;因自身高效的沉浸式在线沟通功能&#xff0c;逐渐走进了大众的视野。身临其境的线上漫游体验以及实时同屏互联的新型交互模式&#xff0c;提升了商家同用户之间的沟通效率&#xff0c;进一步实现了远程线上一对一、一对多的同屏带看&#xff0c;用户足不…

K8S pod无损上下线

在最近的K8s服务上线过程中&#xff0c;我发现了一些问题&#xff0c;更具体的说&#xff0c;我在使用阿里云k8s的过程中注意到&#xff1a;会出现slb短时RT增加&#xff0c;Pod部署初期就达到了扩容上限&#xff0c;并且开始大量的扩容&#xff0c;这无疑占用了大量的k8s资源。…

【LeetCode】2629. 复合函数

复合函数 题目题解 题目 请你编写一个函数&#xff0c;它接收一个函数数组 [f1, f2, f3&#xff0c;…&#xff0c; fn] &#xff0c;并返回一个新的函数 fn &#xff0c;它是函数数组的 复合函数 。 [f(x)&#xff0c; g(x)&#xff0c; h(x)] 的 复合函数 为 fn(x) f(g(h(x…

HTTP 缓存机制

一、强制缓存 只要浏览器判断缓存没有过期&#xff0c;则直接使用浏览器的本地缓存而无需再请求服务器。 强制缓存是利用下面这两个 HTTP 响应头部&#xff08;Response Header&#xff09;字段实现的&#xff0c;它们都用来表示资源在客户端缓存的有效期&#xff1a; Cache…

六个自媒体写作方法,提升自媒体创作收益

在自媒体时代&#xff0c;写作成为了一个不可或缺的技能。特别是对于新手来说&#xff0c;掌握一些有效的写作方法&#xff0c;可以事半功倍&#xff0c;更好地展现个人创意和观点。在这里&#xff0c;我将分享六个适合新手的自媒体写作方法&#xff0c;希望能够为你在写作之路…

肾虚的16个表现,你有吗?

现代研究发现&#xff1a;导致人体衰老的根本原因不是年龄&#xff0c;而是“肾虚”。此外&#xff0c;肾虚不是男人的专利&#xff0c;女人肾虚的危害更大。 一、肾虚的16个表现 1、总感觉口咸 我们的五味&#xff08;酸苦甘辛咸&#xff09;跟我们的脏腑是相对应的&#xf…

基于jsp+servlet的在线考试系统

基于jspservlet的在线考试系统, 演示地址:英语在线考试系统考生测试账号:用户名:stu,密码:stu,管理员测试账号用户名:admin,密码:admin &#xff08;源码里包含数据库文件&#xff09; 本系统分为两个角色&#xff0c;一个时考生&#xff0c;一个是管理员&#xff0c;考生可…

马来西亚虾皮选品工具:如何优化您的电商业务

随着电子商务的快速发展&#xff0c;越来越多的商家开始将目光投向在线市场。在马来西亚&#xff0c;虾皮&#xff08;Shopee&#xff09;平台成为了一个备受瞩目的电商平台&#xff0c;吸引了大量的商家和消费者。然而&#xff0c;要在这个竞争激烈的市场中脱颖而出并取得成功…

Java程序员,你掌握了多线程吗?【文末送书】

目录 摘要 01、多线程对于Java的意义 02、为什么Java工程师必须掌握多线程 03、Java多线程使用方式 04、如何学好Java多线程 参与方式&#x1f947; 推荐一个人工智能学习网站 https://www.captainbed.cn/bear 摘要 互联网的每一个角落&#xff0c;无论是大型电商平台的…

Image augmentation for classification¶

参考文章&#xff1a; We can divide the process of image augmentation into four steps: 1.导入albumentations和 a library库以从磁盘读取图像&#xff08;例如&#xff0c;OpenCV&#xff09;。 2.Define an augmentation pipeline 管道. 3.Read images from the disk…

EUREKA: HUMAN-LEVEL REWARD DESIGN VIACODING LARGE LANGUAGE MODELS

目录 一、论文速读 1.1 摘要 1.2 论文概要总结 相关工作 主要贡献 论文主要方法 实验数据 未来研究方向 二、论文精度 2.1 论文试图解决什么问题&#xff1f; 2.2 论文中提到的解决方案之关键是什么&#xff1f; 2.3 用于定量评估的数据集是什么&#xff1f;代码有…

各种滤波算法的比较(GF、KF、EKF、UKF、PF)

目录 一、前言 二、滤波算法介绍 1、GF&#xff08;高斯滤波&#xff09; 2、KF&#xff08;卡尔曼滤波&#xff09; 3、EKF&#xff08;可扩展卡尔曼滤波&#xff09; 4、UKF&#xff08;无迹卡尔曼滤波&#xff09; 5、PF&#xff08;粒子滤波&#xff09; 三、不同滤…