内存操作----memcpy&memmove ---通用swap(强大的)

本文详细介绍了C语言中的内存操作函数,如memcpy、memmove、memset、memchr和memcmp的使用方法及注意事项,特别强调了memcpy与memmove在处理内存重叠情况下的不同表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 --------------内存操作------------------

在字符串中,我们遇到了好多字符串函数,例如:strlen,直接就可以求字符长度,strcpy可以直接copy两个字符串

那么我们的整型也想这样子的函数,对整型发福利,mencpy ,memmove ,memcmp,memset,memchr这些函数针对所有的都使用,无论你是字符串,还是整型,都ok!

如果你对那些str的函数还有印象,那么在这里去了解;http://blog.youkuaiyun.com/qq_35256722/article/details/51799485#

1.memcpy // menmove


    void *memcpy(void *dest, const void *src, size_t n);

    void *memmove(void *dst, const void *src, size_t count);

函数的功能都是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。

区别:

当内存发生局部重叠的时候,memmove保证拷贝的结果是正确的,memcpy未定义。

#include<stdio.h>
int main()
{
	char arr[] = "1234";
	memmove(&arr[1],arr,2);
	printf("%s\n",arr);
	return 0;
}

结果:

这个结果一定,但是在不同的平台上memcpy是不一样的。

知道用法之后,我们看看我们之前写的那些swap这个是很局限的,现在我们写一个通用的。

2.通用swap

之前的swap是在函数传参的时候看着类型传参,那么如果我懒得该,就想换,感觉很为难,而且他的弊端也有一些哦!

现在一个超级厉害的swap,一旦封装起来,就不用再再打开,只需要传值了!

#include<stdio.h>
#include<stdlib.h>
void swap(void *p,void *s,int num)
{
	void *tmp = malloc(num);
	memcpy(tmp,p,num);
	memcpy(p,s,num);
	memcpy(s,tmp,num);
	free(tmp);
}
int main()
{
	int a[] = {1,3};
	int b[] = { 2,4};
	swap(a,b,3);
	return 0;
}

看到他的强大功能了吧!

你在主函数里面只需要传值了,不用去改了!用起来就很方便了!

2,memset

void *memset(void  const*a,  int ch, size_t n);

3.memchr

void *memchr(void const *dest,  int ch, size_t n);

4.memcmp

void *memcmp(void const*dest, void const *src, size_t n);

这里的用法和memcpy的用法相似,那就直接用就好了!

ok!

好累!!!




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值