joomla构建行业网站,七台河新闻联播最新,洛阳百事通文化传播有限公司,自学做网站可以吗一.memcpy的使用和模拟实现
1.函数原型 void* memcpy(void* destination, const void* source, size_t num); destination是目标内存块的指针 source是源内存块的指针 num是要复制的字节数 .函数memcpy从source的位置开始向后复制 num个字节 的数据到destination指向的内存位置…一.memcpy的使用和模拟实现
1.函数原型 void* memcpy(void* destination, const void* source, size_t num); destination是目标内存块的指针 source是源内存块的指针 num是要复制的字节数 .函数memcpy从source的位置开始向后复制 num个字节 的数据到destination指向的内存位置。 .这个函数在遇到 \0 的时候并不会停下来。 .如果source和destination有任何的重叠复制的结果都是未定义的。 PS:memcpy函数只关心内存块的二进制表示不关心其所代表的数据类型因此可能会出现类型转换问题。此外在使用memcpy函数时需要确保目标内存块有足够的空间来存储源内存块中的数据否则会导致内存越界错误。 2.代码使用 #include stdio.h
#include string.h
int main()
{int arr1[] { 1,2,3,4,5,6,7,8,9,10 };int arr2[10] { 0 };memcpy(arr2, arr1, 20);//注意是20个字节int i 0;for (i 0; i 10; i){printf(%d , arr2[i]);}return 0;
} 3.memcpy的模拟实现 #includestdio.h
void *my_memcpy(void *p1,const void *p2,int n)
{int i0;for(i0;in;i){*(char*)p1*(char*)p2;p1;p2;}
}
int main()
{int arr1[20]{1,2,3,4,5,6,7,8,9,10};int arr2[5]{1,2,3,4,5};my_memcpy(arr13,arr2,5*sizeof(int));int i0;for(;i20;i){printf(%d ,arr1[i]);}return 0;
} 二.memmove的使用与模拟实现
1.函数原型 void * memmove ( void * destination, const void * source, size_t num ); memmove函数会将src指针指向的内存区域中的前num个字节复制到dest指针指向的内存区域中。 PS:与memcpy函数相比memmove函数更加灵活因为它能够处理源地址与目的地址重叠的情况。但是由于memmove函数需要进行更多的判断和处理所以在一些情况下memcpy函数可能更加高效。 2.代码使用 #include stdio.h
#include string.h
int main()
{int arr1[] { 1,2,3,4,5,6,7,8,9,10 };memmove(arr12, arr1, 20);int i 0;for (i 0; i 10; i){printf(%d , arr2[i]);}return 0;
} 3.memmove的代码模拟实现 #includestdio.h
void *my_memmove(void *p1,const void *p2,int n)
{int i0;if(p1p2){for(i0;in;i){*(char*)p1*(char*)p2;p1;p2;}}else{while(n--)*((char*)p1n)*((char*)p2n);}
}
int main()
{int arr[10]{1,2,3,4,5,6,7,8,9,10};my_memmove(arr2,arr,4*sizeof(int));int i0;for(;i10;i){printf(%d ,arr[i]);}return 0;
}