目录
1. memcpy函数的使用与模拟
memcpy函数的模拟实现:
void* my_memcpy(void* dest, const void* src, size_t num) //内存数据复制函数
{
for (int i = 0; i < num; i++)
{
*((char*)dest + i) = *((char*)src + i);
}
return dest;
}
模拟函数的代码验证:
void test(void)
{
int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };
int arr2[10];
my_memcpy(arr2, arr1, 7 * sizeof(int));
}
my_memcpy前arr2内部的数据如下:
my_memcpy运行后:
2. memmove函数的使用与模拟
memmove函数的模拟实现:
void* my_memmove(void* dest, const void* src, size_t num) //8.内存块移动复制(移动的格数是dest-src的绝对值)
{
if (dest > src && dest < (char*)src + num) //情况1:dest位于内存块(src,src+num)中,即dest的值属于该区间
{
//从右往左复制
for (int i = num - 1; i >= 0; i--)
{
*((char*)dest + i) = *((char*)src + i);
}
}
else //情况2:dest位于内存块外,即dest < src或dest > src+num(等于的话两种方向都可以,这里我放在了从左往右)
{
//从左往右复制
for (int i = 0; i < num; i++)
{
*((char*)dest + i) = *((char*)src + i);
}
}
return dest;
}
模拟函数的代码验证:
void test(void)
{
int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };
my_memmove(arr1+3, arr1 , 5 * sizeof(int));
}
my_memove运行前:
运行后:
3. memset函数的使用
我们把两个整型数组分别用memset初始化为“0”和“1”会怎么样?
void test(void)
{
int arr1[5];
int arr2[5];
memset(arr1, 0, 5*sizeof(int));
memset(arr2, 1, 5 * sizeof(int));
}
为什么value设成1,初始化结果是16843009 ?
4. memcmp函数的使用
5. memchr函数的使用
本期分享完毕,感谢大家的支持Thanks♪(・ω・)ノ