memcpy方法解析
内存拷贝函数的一般用法memcpy()函数的拷贝原理分析以深浅拷贝为例分析memcpy的拷贝原理用memcpy()函数与不用memcpy()函数进行拷贝数据的区分
内存拷贝函数的一般SEO靠我用法
有两种拷贝函数,strcpy()和memcpy(),strcpy()只能对字符串进行拷贝复制,十分不通用,但是memcpy()可以对任意两个相同类型的数据进行拷贝复制,极大地方便了编程过程中的一些SEO靠我特殊需要。
函数语法:memcpy(void* to,void* from,int number);
意为从from复制大小为number的内容到to所在位置代码示例包含单个整型数据的copy和整型数组的
SEO靠我copy,其他数据类型的copy都大致相同,就不一一给出示例了。
#include"stdio.h"
#include"string.h"
#inclu
SEO靠我de"stdlib.h"
void main()
{int arr0,arr1=333;memcpy(&arr0,&arr1,sizeof(int));printf("
SEO靠我%d\n",arr0);int *arr2,arr3[3]={1,2,3};arr2 = (int *)malloc(sizeof(int));memcpy(arr2,arr3,3*sizeof(in
SEO靠我t));printf("%d \n",arr2[2]);}
需要注意,在使用memcpy()函数时同strcpy()函数一样,都需包含string.h头文件
memcpy()函数的拷贝原理分析
以深浅拷贝为SEO靠我例分析memcpy的拷贝原理
memcpy()函数是从from位置复制一份数据到to所在位置,相当于我们常用的复制粘贴效果(类似于深拷贝),还有一种通过地址指向拷贝(也就是浅拷贝),下面我们通过代码和解
SEO靠我析加以具体的分析。
用memcpy()函数与不用memcpy()函数进行拷贝数据的区分
用拷贝函数memcpy()实现数据拷贝(深拷贝) 代码
#include"stdio.h"
SEO靠我 #include"stdlib.h"
#include"string.h"
void main()
{char str1[10][10];pri
SEO靠我ntf("%d\n",sizeof(char)); //char 类型占1个字节printf("%d\n",sizeof(char *)); //char *占4个字节,char *表示的是地址,因此
SEO靠我长度为4printf("%d\n",sizeof(str1)); //与下一个程序对比,在这里str不是以指针的形式出现,而是具体的字符串数组char str[3][10],ptr[3][10]={"
SEO靠我mayongen1","mayongen2","mayongen3"};memcpy(str,ptr,8*sizeof(sizeof(char *))); //从ptr中,拷贝8*sizeof(cha
SEO靠我r *)(即8*4=32字节)大小的空间容量信息,到str内//用内存拷贝函数将字符串数组ptr的内容复制过去的 这里是 用拷贝函数和不用拷贝函数时两者的区别for(int i=0;i<3;i++)p
SEO靠我rintf("%s\n",*(str+i));printf("\n");
}
不用拷贝函数实现数据拷贝(浅拷贝) 代码
#include"stdio.
SEO靠我h"
#include"stdlib.h"
#include"string.h"
void main()
{//str在这里是以二重字符
SEO靠我串指针形式出现的char **str,ptr[3][10]={"mayongen1","mayongen2","mayongen3"};str=(char **)malloc(3*sizeof(cha
SEO靠我r *));//申请了三个地址//在这里申请的空间给三个字符串的首地址了*str=ptr[0];*(str+1)=ptr[1];*(str+2)=ptr[2];//用地址传递的方式将字符串数组ptr的
SEO靠我内容复制过去的for(int i=0;i<3;i++)printf("%s\n",*(str+i));printf("\n");
}