memcpy方法解析

  • 内存拷贝函数的一般用法
  • memcpy()函数的拷贝原理分析
    • 以深浅拷贝为例分析memcpy的拷贝原理
      • 用memcpy()函数与不用memcpy()函数进行拷贝数据的区分

内存拷贝函数的一般用法

 有两种拷贝函数,strcpy()和memcpy(),strcpy()只能对字符串进行拷贝复制,十分不通用,但是memcpy()可以对任意两个相同类型的数据进行拷贝复制,极大地方便了编程过程中的一些特殊需要。

函数语法:memcpy(void* to,void* from,int number);
意为从from复制大小为number的内容到to所在位置

  • 代码示例包含单个整型数据的copy和整型数组的copy,其他数据类型的copy都大致相同,就不一一给出示例了。
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
void main()
{int arr0,arr1=333;memcpy(&arr0,&arr1,sizeof(int));printf("%d\n",arr0);int *arr2,arr3[3]={1,2,3};arr2 = (int *)malloc(sizeof(int));memcpy(arr2,arr3,3*sizeof(int));printf("%d \n",arr2[2]);}

需要注意,在使用memcpy()函数时同strcpy()函数一样,都需包含string.h头文件

memcpy()函数的拷贝原理分析

以深浅拷贝为例分析memcpy的拷贝原理

  • memcpy()函数是从from位置复制一份数据到to所在位置,相当于我们常用的复制粘贴效果(类似于深拷贝),还有一种通过地址指向拷贝(也就是浅拷贝),下面我们通过代码和解析加以具体的分析。

用memcpy()函数与不用memcpy()函数进行拷贝数据的区分

  • 用拷贝函数memcpy()实现数据拷贝(深拷贝) 代码
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
void main()
{char str1[10][10];printf("%d\n",sizeof(char));  //char 类型占1个字节printf("%d\n",sizeof(char *)); //char *占4个字节,char *表示的是地址,因此长度为4printf("%d\n",sizeof(str1)); //与下一个程序对比,在这里str不是以指针的形式出现,而是具体的字符串数组char str[3][10],ptr[3][10]={"mayongen1","mayongen2","mayongen3"};memcpy(str,ptr,8*sizeof(sizeof(char *))); //从ptr中,拷贝8*sizeof(char *)(即8*4=32字节)大小的空间容量信息,到str内//用内存拷贝函数将字符串数组ptr的内容复制过去的  这里是 用拷贝函数和不用拷贝函数时两者的区别for(int i=0;i<3;i++)printf("%s\n",*(str+i));printf("\n");
}
  • 不用拷贝函数实现数据拷贝(浅拷贝) 代码
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
void main()
{//str在这里是以二重字符串指针形式出现的char **str,ptr[3][10]={"mayongen1","mayongen2","mayongen3"};str=(char **)malloc(3*sizeof(char *));//申请了三个地址//在这里申请的空间给三个字符串的首地址了*str=ptr[0];*(str+1)=ptr[1];*(str+2)=ptr[2];//用地址传递的方式将字符串数组ptr的内容复制过去的for(int i=0;i<3;i++)printf("%s\n",*(str+i));printf("\n");
}

内存拷贝函数memcpy相关解析(C语言)相关推荐

  1. 实现一个高效率的内存拷贝函数memcpy

    内存拷贝函数memcpy memcpy是memory copy的缩写,意为内存复制,在写C语言程序的时候,我们常常会用到它.它的函原型如下: void *memcpy(void *dest, cons ...

  2. 字符串复制函数strncpy()和内存拷贝函数memcpy()

    #include<string.h> char *strncpy(char *dest, const char *src, unsigned long n); 功能是将指针变量src所指向 ...

  3. C/c++中内存拷贝函数memcpy详解

    原型:void*memcpy(void*dest, const void*src,unsigned int count); 功能:由src所指内存区域复制count个字节到dest所指内存区域. 说明 ...

  4. 内存拷贝函数memcpy

    void* __cdecl memcpy(_Out_writes_bytes_all_(_Size) void* _Dst,_In_reads_bytes_(_Size) void const* _S ...

  5. 【C语言】字符串拷贝函数(strcpy)与内存拷贝函数的不同及内存拷贝函数(memcpy)的模拟实现

    目录 字符串拷贝函数(strcpy) 函数原型 应用实例 我们将一个存放"abcdefg"的字符数组arr的内容拷贝到字符数组brr之中. 缺点 内存拷贝函数(memcpy) 函数 ...

  6. 手撕内存拷贝函数 memmove、memcpy

    做题家系列 -- 手撕内存拷贝函数 memmove.memcpy memcpy 函数原型 实现思路 手撕代码 面试注意要点 memmove 函数原型 实现思路 手撕代码 面试注意要点 总结 memcp ...

  7. c语言内存复制函数,【C语言】 字符串操作函数及内存拷贝函数归总

    今天在这里把零散的一些常用的字符串操作函数和内存拷贝函数进行一下归总实现. 一 . 字符串操作函数 字符串操作函数有很多,这里我列举一些常用的函数,以及自实现的代码: 字符串拷贝函数: 函数原型:ch ...

  8. 【内存拷贝函数:memcpy与memmove】

    文章目录 前言 一.memcpy函数(内存拷贝)的实验 二.memcpy函数的模拟实现 三.memmove函数(内存移动)的实验 四.memmove函数的模拟实现 总结 前言 c和c++使用的内存拷贝 ...

  9. C语言里的几个拷贝函数memcpy、memset、strcpy、strncpy

    #include<string.h> 1. src和dest所指内存区域不能重叠,函数返回指向dest的指针.memcpy用来做内存拷贝,你可以拿它拷贝任何数据类型的对象,可以指定拷贝的数 ...

最新文章

  1. 堆排序怎么建立初始堆_学习笔记-详解堆排序
  2. ios 支付宝支付集成
  3. zabbix 监控项自动发现过滤_Zabbix监控之配置Linux自动发现与自动注册报警
  4. Response文件下载
  5. Python面试题(三)(爬虫方面)
  6. 开源爬虫larbin分析
  7. Python学习进程
  8. 在Ubuntu 18.04系统上安装和配置DBeaver的步骤
  9. oracle test 卡死,oracle11g plsql调试存储过程卡死的处理技巧
  10. docker镜像与容器概念
  11. 华为c语言笔试题下载,2005年华为招聘--C语言笔试试题
  12. JAVA毕设项目-网上订餐系统(附:源码 论文 Sql文件)
  13. 一年中的最后一天说说_2020最后一天的心情说说
  14. 现代公关无需遮遮掩掩,明火执仗开干就行
  15. jmeter性能测试--对MQTT服务做压力测试
  16. html个人新闻网站,html,js,css实现
  17. Python 变量赋值和命名规则
  18. u盘拷贝服务器文件,服务器向u盘拷贝数据库
  19. SourceInsight4.0下载安装教程
  20. Node-RED使用指南:26:使用exec执行系统命令

热门文章

  1. 最实用的 Docker 知识(一)
  2. 中式家装红木装修,邂逅低调的奢华
  3. 前端 115道 面试题总结【持续更新...】
  4. [CV] 基于机器视觉和强化学习的导航
  5. 利用上虚拟化,说一下TLB,以及VHE
  6. 快速入门:Slurm资源管理与作业调度系统
  7. jQuery-动画效果(王者荣耀手风琴案例)
  8. linux 消息队列的单工通信,半双工通信
  9. Python数据分析 | Numpy基本属性介绍
  10. 微信公众号里放XLS链接教程