C语言memcmp函数
目录
- 开头
- 1.什么是
memcmp
函数? - 2.
memcmp
函数的内部 - 程序
- 流程图
- 3.
memcmp
函数的实际应用 - 比较整型数组
- 比较短整型二维数组
- 比较结构体变量
- ……
- 结尾
开头
大家好,我叫这是我58。今天,我们要学一下关于C语言里的memcmp
函数的一些知识。
1.什么是memcmp
函数?
memcmp
函数,是一个来自于string.h
头文件的函数,用于比较两块内存的大小,它是由这样构成的:int memcmp ( const void * ptr1, const void * ptr2, size_t num );
1,其中,ptr1
代表了要比较的第一块内存,ptr2
代表了要比较的第二块内存,而num
则代表了要比较的内存的大小(单位为字节),那么,memcmp
函数的返回值到底是怎么样的呢?其实,memcmp
函数的返回值只要用一个表格就可以了解得清清楚楚了。
返回值 | 原因 |
---|---|
<0 | 第一块内存<第二块内存 |
0 | 第一块内存=第二块内存 |
>0 | 第一块内存>第二块内存 |
在看完这个表格之后,有人会不知道memcmp
函数是如何比较ptr1
和ptr2
这两块内存吗?如果不知道,那我告诉你:其实memcmp
函数比较内存的方法与strcmp
函数比较字符串的方法十分相似,都是按一个一个字节地从左到右进行比较,只不过memcmp
函数的比较方法还是有一点跟strcmp
函数不同,那就是:memcmp
函数在找到空字符\0
的时候不会停止比较1,只有比较完有num
个字节大的内存ptr1
和ptr2
后,才会停止比较。接下来,就还有一个问题了:为什么memcmp
函数的前两个参数的类型都是const void*
,而第三个参数的类型是size_t
呢?因为,memcmp
函数的用途就只是用来比较两个内存而已,不需要考虑内存的类型,只需要考虑内存的大小就可以了。而且,memcmp
函数都不会去动一下要比较的内存,所以,memcmp
函数所有参数的类型就分别是const void*
,const void*
和size_t
了,在看完memcmp
函数的基本介绍之后,接下来就要看一下memcmp
函数的内部了。
2.memcmp
函数的内部
程序
int memcmp(const void* ptr1, const void* ptr2, size_t num) {for (int i = 0; num > 0; num--) {if (i = *(char*)ptr1 - *(char*)ptr2) {return ((i = (i > 0)) || (i = -1), i);}(char*)ptr1 = (char*)ptr1 + 1;(char*)ptr2 = (char*)ptr2 + 1;}return 0;
}
流程图
3.memcmp
函数的实际应用
比较整型数组
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main() {int arr[4] = { 3,5,6,7 };int arra[4] = { 3,5,6,7 };printf("%d\n", memcmp(arr, arra, 16));return 0;
}
比较短整型二维数组
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main() {short arr[3][3] = { 3,5,6,3,2,5,56,2,9 };printf("%d\n", memcmp(*arr, arr[1], 6));return 0;
}
比较结构体变量
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
struct Moster {int x;int y;char direction;
};
int main() {struct Moster m = { 7,5,'S' };struct Moster ma = { 3,9,'W' };printf("%d", memcmp(&m, &ma, sizeof(struct Moster)));
}
……
结尾
在你看到这里之后,可以评论来互动一下我哦。
选自C语言中
memcmp
函数的简介 ↩︎ ↩︎