c语言:有关内存函数的模拟实现

memcpy函数:

功能: 复制任意类型的数据,存储到某一数组中。

代码模拟实现功能:

cpp 复制代码
 #define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include <stdio.h>
#include<assert.h>
memcpy
void* my_memcpy(void* dest, const void* src, size_t num)
{
	void* ret = dest;
	assert(dest && src);
	while (num--)
	{
		*(char*)dest = *(char*)src;
		dest = (char*)dest + 1;
		src = (char*)src + 1;
	}
	return ret;
}
int main()
{
	int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };
	my_memcpy(arr1, arr1+2, 5 * sizeof(int));
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%d ", arr1[i]);// 1 2 1 2 3 4 5 8 9 10
	}

	return 0;
}

效果展示:

memmove函数:

功能:按照指定内容的大小替换掉指定内容。

代码模拟实现功能:

cpp 复制代码
#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include <stdio.h>
#include<assert.h>
memcpy

//
//
//memmove
void*  my_memove(void* dest, const void* src, size_t num)//void* 可以拷贝任意类型的数据,整型,字符,结构体
{
	void* ret = dest;
	assert(dest && src);
	if (dest < src)
	{
		//前-》后
		while (num--)
		{
			*(char*)dest = *(char*)src;//赋值,转化为char*的原因:不知道传进来的是什么类型,需要复制多少字节,因此用最小字节char*来转化
			dest = (char*)dest + 1;
			src = (char*)src + 1;//循环完一次,都找下一个字节
		}
	}
	else
	{
		//后-》前
		while (num--)
		{
			*((char*)dest+num) = *((char*)src + num);//赋值,和上面同理,但是是从后面往前赋值。
		}
	}
	return ret;
}

int main()
{
	int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };
	my_memove(arr1, arr1+2, 5 * sizeof(int));
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%d ", arr1[i]);
	}
	return 0;
}

效果展示:

相关推荐
wayz1113 小时前
Day 5:KNN算法与相似K线匹配
人工智能·算法·机器学习
cui_ruicheng13 小时前
Linux IO入门(一):从C语言IO到文件描述符
linux·运维·c语言
晨曦中的暮雨13 小时前
Java集合类型主要有哪些?以及各自原理
数据结构·算法
lixinnnn.13 小时前
01BFS:Three States
算法
网域小星球13 小时前
C 语言从 0 入门(二十二)|内存四区:栈、堆、全局、常量区深度解析
c语言·开发语言
晓纪同学14 小时前
EffctiveC++_第三章_资源管理
开发语言·c++·算法
蚊子码农14 小时前
每日一题--C语言指针与内存泄漏:一道小问题的深度复盘
c语言·开发语言
Fanfanaas14 小时前
Linux 系统编程 进程篇(一)
linux·运维·服务器·c语言·开发语言·网络·学习
沐雪轻挽萤14 小时前
6. C++17新特性-编译期 if 语句 (if constexpr)
开发语言·c++
水云桐程序员14 小时前
C语言编程基础,输入与输出
c语言·开发语言·算法