0
点赞
收藏
分享

微信扫一扫

WPF 控件数据源绑定

目录

1. memcpy函数的使用与模拟

2. memmove函数的使用与模拟

3. memset函数的使用

4. memcmp函数的使用

5. memchr函数的使用 

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♪(・ω・)ノ

举报

相关推荐

0 条评论