内存块处理函数-c语言

版权声明:转载请注明出处: https://blog.csdn.net/qq_38701476/article/details/82927309

参考博客
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哈哈~

猜你喜欢

转载自blog.csdn.net/qq_38701476/article/details/82927309
今日推荐