内存函数-----Memcmp

memcpy函数

头文件:

函数功能:比较分别从地址1 ptr1 和地址2 ptr2 处开始的num个字节的大小,并返回一个整型值,返回0,说明两个数据相等,返回1,说明地址1处的数据大,返回-1,说明地址2处的数据大;

函数参数以及返回类型:int memcpy(const void* ptr1,const void* ptr2,size_t num);

参数解释:

1.ptr1和ptr2是待比较数据的首地址,num是比较的字节数;

2.用const来修饰待比较的数据,防止数据被篡改;

3.返回类型是整型数据;

函数使用1:

地址1处的数据数组:arr1[5]={1.0, 2.0, 3.0, 4.0, 5.0};

地址2处的数据数组:arr1[5]={1.0, 3.0, 6.0, 8.0, 2.0};

比较结果:0

代码实现:

#include 
#include 
int main()
{
	float arr1[5] = { 1.0,2.0,3.0,4.0,5.0 };
	float arr2[5] = { 1.0,3.0,6.0,8.0,2.0 };
	int ret = memcmp(arr1, arr2, 4);
	printf("返回结果->%d\n", ret);
	return 0;
}

【注意】float型数据存储时的规则略微有些复杂

函数使用2:

也可以比较字符类型的数据:

地址1处的字符数组:arr1[] = "aello";

地址2处的字符数组:arr2[] = "zbcde";

比较结果:-1

代码实现:

#include 

#include 

int main()
{

	char arr1[] = "aello";

	char arr2[] = "zbcde";

	int ret = memcmp(arr1, arr2, 1);

	printf("返回结果->%d\n", ret);

	return 0;
}

【注意】结果是比较字符的ASCII值,返回值也是一个int类型的数据;

代码实现memcmp函数的功能

#include 
#include 
#include 
#include 

int my_memcmp(const void* ptr1, const void* ptr2, size_t num)
{
	assert(ptr1 && ptr2);
	//强制类型转化
	char* ptr11 = (char*)ptr1;
	char* ptr22 = (char*)ptr2;
	if (*ptr11 == *ptr22 && num--)  // num是判断多少次
	{
		ptr11++;
		ptr22++;
	}

	if (*ptr11 > *ptr22)
	{
		return 1;
	}
	else if (*ptr11 < *ptr22)
	{
		return -1;
	}
	else
	{
		return 0;
	}
}
int main()
{
	char arr1[] = "1ello";

	int arr2[] = { 1,2,3 };

	int ret = my_memcmp(arr1, arr2, 1);

	printf("返回结果->%d\n", ret);
	return 0;

注意事项:

1.在比较两个地址处数据大小的时候,单纯的比较其ASCII值即可;

2.数字1和字符1是不一样的;

特别鸣谢:哔哩哔哩比特鹏哥的视频教程

你可能感兴趣的:(C语言库函数,c++,开发语言)