C语言程序设计编程学习—内存操作函数库mem.h相关知识详解

C语言是面向过程的,而C++是面向对象的

C和C++的区别:

C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。

C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。

C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。

今天这篇介绍的主要针对是字符串进行的一些操作函数,毕竟多了解相关函数,也是非常重要的,好了,不多说直接进入主题。

小编推荐一个学C语言/C++的学习裙【 六九九,四七零,五九六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

一、memcpy()函数:

该函数的一般形式为:

void *memcpy(void *dest,void *s,unsigned m);

功能:从指针s指向的一片内存地址拷贝m个字节到目标指针dest指向的一片内存之中。

从参数的指针的类型可以看出该函数不单单只能拷贝指针,其他类型的也可以,比如整型、结构体类型、浮点类型都可以。功能还是蛮强大的。

参数:s是源区域指针,dest目的区域指针,m是需要复制的字节数。

返回值:指向目标区域的指针(也就是指向dest的指针)。

注意:1,、指针s与dest指针指向的内存不能重叠,否则有可能出错。

2、当用作拷贝字符串时,在遇到''时不会结束,而是肯定会拷贝完n个字节。

3、如目的指针指向的内存空间以存有数据,那么将被覆盖掉。

4,第三个参数是字节数,注意是字节数,当你需要拷贝一个整型数值,一般情况下整型占用四个字节,因此m=4。

范例:

memcpy范例

运行结果:

运行结果

二、memmove()函数:

该函数一般形式为:

void *memmove(void *dest,void *s,unsigned m);

功能:将s指针指向的内存中的数据拷贝m个字节的数据到dest指针所指向的内存区域中。

该函数的返回值为:指向dest的指针。

该函数与上面介绍的memcpy函数相比,即使源指针s指向的内存区与目的指针dest指向的内存内存区有重叠,该函数仍能正确拷贝,但是效率没有memcpy函数好,所以如果你不能保证两者的内存空间不存在重叠部分,那么建议使用memmove()函数。

当然该函数跟上面的一样,可以拷贝移动任何类型的数据。

范例:

memmove范例

运行结果:1 2 3 4 5。

三、memccpy()函数:

其一般形式为:

void *memccpy(void *dest,void *s,int c,unsigned m);

功能:从指针s指向的内存中拷贝m个字节到dest指针所指向的内存中,当遇到参数c时结束拷贝,则返回指向dest中值为c的下一个字节的地址的指针。

返回值:返回指向参数c后的在dest中的第一个字节的指针,如果s的前m个字节中参数c不存在,则返回NULL。

范例:

小编推荐一个学C语言/C++的学习裙【 六九九,四七零,五九六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

memccpy范例

运行结果:

运行结果

四、memcmp()函数:

该函数的一般形式为:

int memcmp(void *s1,void *s2,unsigned m);

功能,用于比较指针s1和s2指向的内存区的前m个字节,注意是按字节比较。

返回值:当s1

等于时,返回值为0,

大于时,返回值大于0。

当s1与s2时是指向字符串时,就是按顺序比较字符串中字符的大小,也就是按ascii的大小比较的。

范例:

memcmp函数范例

运行结果:-1

上面一般情况运用在字符串中,我故意这样做,是表达整型也能用此函数比较,并且只比较第一个不同的数值,一旦找到第一个不同的,后面一律不管,多大都没用。

五、memicmp()函数:

其一般形式为:

int memicmp(void *s1,void *s2,unsigned m);

该函数功能跟上一个差不多,不同的是在比较字符串时不区分大小写,其余差不多,参考上面,这里占时不多说。

六、memset()函数:

该函数的一般形式为:

void *memset(void *s,int ch,unsigned m);

功能:将指针s指向的内存的前m个字节设置为ch指定的ascii值,该函数的作用通常为新申请的内存做初始化的工作,返回指向s的指针。

注意:该函数是以字节方式来对内存做初始化,不能用其对整型数组进行任意数值的初始化(除0、-1外),比如看下面代码:

小编推荐一个学C语言/C++的学习裙【 六九九,四七零,五九六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

范例

运行结果:

运行结果

可以看到并没有如愿把整型数组初始化为8,其实出现这种问题的就是此函数以字节(8位二进制)方式赋值,上面8整型,有32位,但其只取后八位进行赋值,因此要是上面把8改成264,运行结果是一样的,因为其后八位都为00001000,就被赋予内存的每一个字节中,那么在转换成整型数值,那么整型数值元素值的二进制就相当于1000 0000 1000 0000 1000 0000 1000,转换成十进制也就是上面运行的值,所以一定要注意,但是要是用在字符串上,就没大问题了。

好了,今天暂时介绍到这里。

这些是C/C++能做的

服务器开发工程师、人工智能、云计算工程师、信息安全(黑客反黑客)、大数据 、数据平台、嵌入式工程师、流媒体服务器、数据控解、图像处理、音频视频开发工程师、游戏服务器、分布式系统、游戏辅助等

推荐阅读更多精彩内容