首页 > 其他分享 >模拟实现 memcpy --浅谈C语言

模拟实现 memcpy --浅谈C语言

时间:2024-08-05 22:05:47浏览次数:12  
标签:src 浅谈 -- void C语言 dest memcpy str1

内存拷贝 - memcpy

描述

C 库函数 void *memcpy(void *str1, const void *str2, size_t n) 从存储区 str2 复制 n 个字节到存储区 str1

memcpy 是最快的内存到内存复制子程序。

它通常比必须扫描其所复制数据的strcpy ,或必须预防以处理重叠输入的memmove更高效。

memcpy, memcpy_s - C++中文 - API参考文档 (apiref.com)

声明

下面是 memcpy() 函数的声明。

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

参数

  • str1 -- 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。
  • str2 -- 指向要复制的数据源,类型强制转换为 void* 指针。
  • n -- 要被复制的字节数。

返回值

该函数返回一个指向目标存储区 str1 的指针。

#include<assert.h>
#include<stdio.h>

void* my_memcpy(void*dest, const void* src, size_t num)
{
		//返回void*
    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[] = { 1, 2, 3, 4, 5 };
    int arr2[5] = { 0 };
    my_memcpy(arr2, arr1, sizeof(arr1));
    return 0;
}

标签:src,浅谈,--,void,C语言,dest,memcpy,str1
From: https://www.cnblogs.com/DSCL-ing/p/18342324

相关文章

  • Linux——线程互斥与同步
    一、线程互斥1.1线程间互斥的概念在学习管道的时候,管道是自带同步与互斥的。而在线程中,当多个线程没有加锁的情况下同时访问临界资源时会发生混乱。在举例之前,先了解几个概念。临界资源:多个线程执行流共享的资源叫做临界资源临界区:每个线程内部访问临界资源的代码叫做临界......
  • MyBatis搭建和增删改查
    MyBatis是一个开源的持久层框架,用于处理数据库的增删改查操作。它能够将Java对象与数据库中的数据进行映射关系的配置,并自动生成对应的SQL语句,从而简化了数据库操作的编码工作。MyBatis的核心思想是将SQL语句与Java代码分离,通过XML或注解来配置SQL语句,使得SQL语句可以进行灵活......
  • 【优秀python大屏】基于python flask的广州历史天气数据应用与可视化大屏
    摘要气象数据分析在各行各业中扮演着重要的角色,尤其对于农业、航空、海洋、军事、资源环境等领域。在这些领域中,准确的气象数据可以对预测未来的自然环境变化和采取行动来减轻负面影响的决策起到至关重要的作用。本系统基于PythonFlask框架,通过对气象数据的分析和处理来提供......
  • 深圳大学-电信院-C程序设计实验-数组、函数、结构体的综合使用
    实验目的(1)进一步掌握数组的定义与使用;进一步掌握函数的定义和函数调用方法;(2)学习和掌握结构体的定义和使用方法;(3)进一步掌握C语言的编程方法;学习动画程序的基本设计思想和方法。实验内容本实验编写一个在控制台窗口中,在不考虑重力的条件下,模拟一组弹球在一个二......
  • Git---分布式版本控制工具
    ......
  • elasticsearch教程
    1.单点部署(rpm):#提前关闭firewalld,否则无法组建集群#1.下载ESrpm包]#https://www.elastic.co/cn/downloads#2.安装es]#rpm-ivhelasticsearch-7.17.5-x86_64.rpm#3.调整内核参数(太低的话es会启动报错)echo"vm.max_map_count=655360fs.file-max=655350......
  • filebeat 教程
    1.filebeat安装#rpm安装方式https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.17.5-x86_64.rpmrpm-ivhfilebeat-7.17.5-x86_64.rpmsystemctlenablefilebeat--now#二进制包安装方式1.下载mkdir-p/data/tools/filebeat/&&cd/data/tools/fi......
  • RabbitMQ(三)Java客户端
    1.快速入门在idea里面创建两个springboot项目,一个模块是consumer,一个是publisher两者有自己的启动类,继承同一父工程的pom。父工程的pom.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http......
  • 2024上岸|314数农备考攻略
    前言......
  • Mybatis-Plus(0废话,全程高能)
    --------------------------------------------------------------------------------------------------------------------------------我知道你可能或多或少用过,都点进来了,就大概看一眼呗......