内存块处理函数-c语言
参考博客
c语言是一门很重要的语言,里面也有一些很重要的特性,其中包括了一些对内存块进行处理的函数.对内存块处理的速度要快于一般的字节处理,今天就讲解一些计较重要的内存块处理函数.c语言中这些函数在头文件string.h中
1. void *memset(void *a,int ch,size_t length)
这个函数我们并不陌生,这个函数用到的频率很多,对一片内存块(按字节)进行赋值,acm中经常用这个函数对数组进行初始化.注意,只能初始化为0,或-1.
例如对数组a[length]初始化:memset(a,0,sizeof(a));
2. void *memcpy(void *dest,void const *src,size_t length),void *memmove(void *dest,void const *src,size_t length)
对一片内存块进行赋值,把src的内容赋值到dest,赋值的长度为length(按字节).要注意长度如果是自己写的整数的话注意类型转换字节后的数值
memmove和memcpy含义一样;
- 注:memmove和memcpy的区别在memcpy不能保证地址重叠是赋值是正确的,里面的细节何可参考这篇博客.但是我要说的是在我电脑上我试了很多次都是没问题的.可能是比较老的版本有这种问题,现在新版本改进了.
3. void *memcmp(void const *a,void const *b,size_t length)
对内存进行比较,负值表示a<b,正值表示a>b,0表示相等
4. void *memchr(void const *a,int ch,size_t length)
表示在内存中找第一个字符ch出现的位置,没找到则返回NULL
#include<stdio.h>
#include<string.h>
int main()
{
int a[20],b[20];
printf("%d %d\n",a[5],b[5]);
for(int i=0;i<20;i++){
a[i]=i+1;
}printf("%d %d\n",a[5],b[5]);
memcpy(b,a,sizeof(a));
printf("%d %d",a[5],b[5]);
memcpy(a,a+1,sizeof(a)-4);
printf("%d %d\n",a[5],b[5]);
printf("%d\n",memcmp(a,a+1,sizeof(a)-4));
return 0;
}
好了常用的就是这些了.欢迎大家关注O(∩_∩)O哈哈~