初学c语言16(内存函数)
1.memcpy
形式:
功能:完成内存块拷贝(所以可拷贝任何类型的数据)
过程:从source开始拷贝num个字节的数据到destination指向的空间里
返回值:返回目标空间的起始地址
应用:
模拟实现:
代码:
#include <stdio.h>
void* my_memcpy(void* des, const void* src, size_t num)
{char* ret = (char*)des;while (num--){*(char*)des = *(char*)src;((char*)des)++;((char*)src)++;}return ret;
}
int main()
{float arr[] = { 1.1f,3.3f,2.2f,4.4f};float arr1[20] = { 0 };my_memcpy(arr1, arr, 8);return 0 ;
}
注意:
该模拟实现的函数不可以处理重叠的部分
例子:
原因:重叠部分拷贝过程中被改为1,2了
二.memmove
形式:与memcpy一样
差异:memmove处理的源内存块和目标内存块是可以重叠的
应用:
注意:
memcpy也可以完成
模拟实现:
代码:
#include <stdio.h>
void* my_memmove(void* des, const void* src, size_t num)
{char* ret = des;while (num--){if (des < src){*(char*)des = *(char*)src;des = (char*)des + 1;src = (char*)src + 1;}else{*((char*)des + num) = *((char*)src + num);}}return ret;
}
int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9,10 };my_memmove(arr+2, arr, 20);return 0 ;
}
结果和解释:
三.memset
形式:
功能:设置内存块的内容,将内存中指定宽度设置特定的内容
头文件:string.h
参数:
ptr:地址,为要设置内存块的起始地址
value:为要设置的特定的内容,但会将value值转换为unsigned char类型的数据进行设置,是以字节为单位设置内存的
num:设置内存的长度,单位字节
返回值:为要设置内存块的起始地址
应用:
注意:
这里不能将所有元素改为1,因为value是以字节为单位设置的
四.memcmp
形式:
功能:比较指定的俩块内存块内容
参数:
ptr1、ptr2:指针,指向待比较内存块
返回值:和strcmp一样