【C语言进阶】内存函数

内存函数

一、memcpy函数

二、memcmp函数

三、memset函数

我们知道字符串函数可以对字符串进行拷贝(strcpy)、字符串的追加(strcat)、字符串的比较(strcmp)等,但是如果我们操作的数据不是字符类型的呢?我们对其他类型的数据进行拷贝、追加等操作该如何实现呢?这里就要用到内存函数了。      

内存函数可以是任意类型的数据,直接通过内存对数据进行操作。

一、memcpy函数:

memcpy内存拷贝函数

    void*memcpy(void *destin,void *source,unsigned n);

       函数的功能是从源内存地址的起始位置开始拷贝若干个字节到目标内存地址中,即从源source中拷贝n个字节到目标destin中,函数参数为void*表示可以接收任意类型的数据。

示例如下:

我们定义两个数组  int arr1[10]={1,2,3,4,5,6,7,8,9,0};  int arr2[]={0}; 我们想把arr1里面的1 2 3 4,拷贝到arr2中去。

首先memcpy功能是从源内存地址的起始位置开始拷贝若干个字节到目标内存地址中,这时源内存地址就是arr1,目标内存地址就是arr2,因为arr1为int类型每个元素为4个字节,我们要拷贝1,2,3,4这四个元素,每个元素占4个字节,所以要拷贝16个字节。

memcpy(arr2,arr1,16);//从arr1内存块中拷贝16个字节元素到arr2内存块中。

示例代码:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main() {
	int arr1[10] = { 1,2,3,4,5,6,7,8,9,0 };
	int arr2[] = {0};
	memcpy(arr2,arr1,16);
	for (int i = 0; i < 4; i++) {
		printf("%d",arr2[i]);
	
	}


	return 0;

}

  运行结果: 

二、memcmp函数:

memcmp内存比较函数

int memcmp(const void*pr1,const void*pr2,unsigned num);

 该函数的功能是将pr1和pr2所指向的内存空间地址的数据进行比较,比较num个字节。

函数有返回类型,返回类型为int ,如果pr1所指向的数据大于pr2所指向的数据函数返回正数,

pr1指向的数据小于pr2指向数据函数返回负数,如果两个数据相等函数返回0

示例: 

 我们依然定义两个数组 int arr1[10]={1,2,3,4,5,6,7,8,9,0};  int arr2[5]={1,2,5,3,6};我们进行比较

memcmp(arr1,arr2,20);//将arr2所指向内存数据与arr1所指向内存数据进行比较,比较5个元素每个元素为int 型,所以比较20个字节,显然arr1所指向内存数据小于arr2所指向内存数据,函数返回值为某个负数

示例代码:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
	int arr1[10] = {1,2,3,4,5,6,7,8,9,0};
	int arr2[5] = {1,2,5,3,6};
	int ret1 = memcmp(arr1, arr2, sizeof(arr2));
	if (ret1 == 0)
	{
		printf("相等\n");
		printf("函数返回值为:%d",ret1);
	}
	else {
		printf("不相等\n");
		printf("函数返回值为:%d",ret1);
	}
	return 0;
}

运行结果:

 三、 memset函数:

memset内存设置函数

void *memset(void *s, int ch,unsigned n);
函数解释:将s所指向的内存块的数据替换为ch,替换n个字节 。函数返回目标空间的起始位置。

示例:

我们定义 一个数组 int arr[10]={1,2,3,4,5,6,7,8,9,0};我们将arr中的1,2,3,4,5,6替换为0。

因为arr1是int 型我们替换6个元素且每个元素为int型(4个字节)所以替换为24个字节。

memset(arr,0,24);

示例代码:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
	int arr[10] = {1,2,3,4,5,6,7,8,9,0};

	memset(arr,0,24);
	for (int i = 0; i < 10; i++) {
	
		printf("%d",arr[i]);
	
	}
	printf("\n");
	
	return 0;
}

 运行结果

    我的分享到此结束啦!

要是我的分享对你学习有帮助,那简直太酷啦!

     若有不足,请大家多多指教。

请公主、王子:点赞-->收藏-->关注。

祝大家新年快乐!每天开心!每天进步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值