【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;
}

 运行结果

    我的分享到此结束啦!

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

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

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

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

  • 31
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言进阶高级编程PDF》是一本以C语言为主题的进阶级别编程书籍,旨在帮助读者提升C语言编程水平并掌握更高级的编程技巧和思维方式。 该PDF书籍的内容包括但不限于以下几个方面: 1. 数据结构与算法:介绍了常用数据结构(如链表、栈、队列、树等)的实现原理和使用方法,以及一些常见算法(如排序、查找等)的实现。 2. 指针与内存管理:探讨了指针的概念、指针和数组、指针和函数等相关内容,以及如何进行动态内存管理和资源释放。 3. 文件操作:介绍了C语言中对文件的读写操作方法,包括文件的打开、写入、读取和关闭等。 4. 高级函数和宏:介绍了C语言中的函数指针、回调函数、宏定义等高级编程技巧,以及如何利用宏定义提高代码的可读性和可维护性。 5. 库函数和系统调用:详细介绍了C语言标准库函数和一些系统调用的使用方法,如字符串处理函数、数学函数、时间函数等。 6. 多线程和进程:探讨了C语言中多线程和进程的概念和使用方法,包括线程的创建与同步、进程的创建与间通信等。 通过阅读《C语言进阶高级编程PDF》,读者可以拓宽自己的C语言知识面,学习更高级和更复杂的编程技巧,提升自己在C语言编程方面的能力和应用水平。无论是对于初学者还是有一定经验的C语言开发者来说,这本书都是一本很有价值的参考资料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值