C语言:模拟实现memcpy
2016-05-30 17:15
459 查看
模拟实现内存拷贝函数memcpy(),该特点与strcpy/article/4218930.html 比较就是不管是不是string类型均可以比较,只是单纯内存的比较。
void *my_memcpy(void *p1,const void *p2, size_t count)设置为空类型是考虑到接收任何类型的转换,无需强制转换。而考虑到p1,p2,sizeof(p1)是地址,=4。而*p是空类型, 不知道访问多少个字节来取内容。因此有以下操作:
char *dest = (char *)p1; char *src = (char *)p2;size_t是unsigned int 型,字节数,即类型长度与串长度乘积。
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<assert.h> void *my_memcpy(void *p1,const void *p2, size_t count) { assert(p1); assert(p2); char *dest = (char *)p1; char *src = (char *)p2; char *ret = dest; while (count--) { *dest = *src; src++; dest++; } return ret; } int main() { float arr1[] = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0 }; float arr2[10]; int i = 0; int len = sizeof(arr1); float *ret = my_memcpy(arr2, arr1,len ); for (i = 0; i < 9; i++) { printf("%f ", *(ret + i)); } system("pause"); return 0; }
相关文章推荐
- 【笔试题】C语言:模拟实现strcmp
- 【笔试题】C语言:模拟实现strcat
- C语言:模拟实现strcpy
- 【笔试题】C语言:模拟实现strncmp
- 【笔试题】C语言:模拟实现strncat
- 【面试题】C语言:模拟实现strncpy,尝试比较strncpy与strcpy区别。
- 【面试题】C语言:模拟实现内存放置函数memset()
- 【面试题】C语言:模拟实现memcmp,试比较memcmp与strcmp,strncmp的区别
- 【指针篇】C语言:指针与数组的区别,数组指针与指针数组的剖析。
- C语言:实现一个函数itoa(int n,char s[]),将整数n这个数字转换为对应的字符串,保存到s中
- C语言:字符数组的内容为;tneduts a ma i;,内容改为i am a student.只能开辟有限个空间
- 【面试常考】C语言:输入:&quot;student a am i&quot;,输出&quot;i am a student,不能使用库函数
- C语言:在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出&#39;b&#39;
- 【笔试题】C语言:在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出&#39;b&#39;。
- C语言:每瓶汽水1元,两个空瓶可以置换一瓶汽水,现在有20元,最多能喝多少瓶汽水。
- C语言:实现一个函数,可以左旋字符串中的k个字符。
- C语言:判断一个字符串是否为另外一个字符串旋转之后的字符串。(左旋右旋、求子串)
- C语言:【面试题】在二维数组中,每行每列都按照递增的顺序排序,判断数组中是否包含一个数。
- C语言:自己动手查看float以及double类型的变量2.5在内存中的存储方式。
- C语言:用递归函数DigitSum(n)实现输入1729,输出sum=1+7+2+9=19的值