【C语言】内存函数~

一、前言

  • 上期我们讲解了与字符相关的函数:
  • 其中就有strcmp()字符串比较函数;strcpy()字符串拷贝函数;他们都能对内存进行一定的操作,可是却无法处理一些非字符串的数据。
  • 而这里我将介绍这四个函数:分别是memcpy();memmove();memset();memcmp()

二、内存函数

1.memcpy
  • **函数声明:**void *memcpy( void * dest , const void * src , size_t count );
  • **函数功能:**将stc指向的空间数据,连续拷贝count个字节的大小到指针dest所指向的对象中,并会返回一个dest所指向空间的起始位置。(dest与str的空间有重叠的时候,其函数的行为是未定义的
  • 模拟实现:
  • 效果展示:
2.memmove
  • **函数声明:**void *memmove( void * dest , const void * src , size_t count );

  • **函数功能:**将stc指向的空间数据,连续拷贝count个字节的大小到指针dest所指向的对象中,并会返回一个dest所指向空间的起始位置。(专门用来处理dest与str的空间有重叠的情况

  • 模拟思想:

  • 模拟实现:

    复制代码
    void* my_memmove(void* dest, void* sour, size_t num)
    {
    	assert(dest && sour);
    	void* ret = dest;
    	if (dest < sour)
    	{
    		while (num--)
    		{
    			*(char*)dest = *(char*)sour;
    			((char*)dest)++;
    			((char*)sour)++;
    		}
    	}
    	else
    	{
    		while (num--)
    			((char*)dest)[num] = ((char*)sour)[num];
    	}	
    	return ret;
    }
  • 效果展示:

3.memset
  • **函数声明:**void *memset( void * dest , int c , size_t count );
  • **函数功能:**将dest所指向的空间,以字节为单位拷贝为c的数据内容,总计拷贝count个。
  • **模拟实现:**memset实现简单,和memcpy很相似。
  • 效果展示:
4.memcmp
  • **函数声明:**int memcmp( const void * buf1 , const void * buf2 , size_t count );
  • **函数功能:**将buf1指向的空间,与buf2指向的空间,以字节为单位,依次比较,若前者较大,返回>0的数字,若相后者较大,返回<0的数字,若比较了count个字节后,都是相等,则返回数字0;其中count为最多拷贝字节数。
  • **模拟实现:**与strncmp实现相似,需要注意类型转换的情况。
  • 效果展示:(切记,我的机器上是小端字节序存储方式)
相关推荐
m0_zj9 分钟前
41.[前端开发-JavaScript高级]Day06-原型关系图-ES6类的使用-ES6转ES5
开发语言·javascript·es6
海棠蚀omo12 分钟前
C++笔记-list
开发语言·c++·笔记
烟雨柳成烟18 分钟前
C++学习Day0:c++简介
开发语言·c++·qt·学习
末央&1 小时前
【C++】特化妙技与分文件编写 “雷区”
开发语言·c++·算法
一个天蝎座 白勺 程序猿1 小时前
Python(19)Python并发编程:深入解析多线程与多进程的差异及锁机制实战
开发语言·python
GSDjisidi2 小时前
日本IT|车载C#开发工程师的前途及职业发展
开发语言·c#
卓豪终端管理2 小时前
如何安全地管理固定功能设备?
java·大数据·开发语言·网络·人工智能·安全
进阶的小木桩2 小时前
VSTO幻灯片退出播放(C#模拟键盘鼠标的事件)
开发语言·c#·计算机外设
代码程序猿RIP2 小时前
C++(22)—内存管理
开发语言·数据结构·c++·算法
灏瀚星空2 小时前
AI 模型高效化:推理加速与训练优化的技术原理与理论解析
开发语言·人工智能·深度学习·程序人生·机器人·智慧城市·量子计算