C语言内存函数

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

前言

1. memcpy 使用和模拟实现

1.1memcpy函数的使用

1.2memcpy函数的模拟实现

2. memmove 使用和模拟实现

2.1memmove的使用

2.2memmove函数的模拟实现

3. memset 函数的使用

4. memcmp 函数的使用

补充一些零散的额外知识点:

总结


前言

世上有两种耀眼的光芒,一种是正在升起的太阳,一种是正在努力学习编程的你!一个爱学编程的人。各位看官,我衷心的希望这篇博客能对你们有所帮助,同时也希望各位看官能对我的文章给与点评,希望我们能够携手共同促进进步,在编程的道路上越走越远!

想回顾上节内容的请点击这里字符函数和字符串函数详解


提示:以下是本篇文章正文内容,下面案例可供参考

针对内存块的!不在乎内存中的数据!

1. memcpy 使用和模拟实现

1.1memcpy函数的使用

void * memcpy ( void * destination, const void * source, size_t num );

• 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。

• 这个函数在遇到 '\0' 的时候并不会停下来。

• 如果source和destination有任何的重叠,复制的结果都是未定义的。

C语言内存函数_第1张图片

1.2memcpy函数的模拟实现

C语言内存函数_第2张图片

C语言内存函数_第3张图片

memcpy函数可以处理不重叠的内存之间的数据拷贝

内存之间如果有数据重叠,要进行数据拷贝,可以使用memmove函数

代码演示:

C语言内存函数_第4张图片

2. memmove 使用和模拟实现

void * memmove ( void * destination, const void * source, size_t num );

memcpy函数只要能够处理不重叠的内存拷贝就行,重叠的情况就交给memmove函数就行了
但是我们发现(vs系类)有时候标准库中的memcpy也能实现重叠拷贝,但是并不代表所有的编译器实现的标准库中的memcpy都能实现重叠拷贝

2.1memmove的使用

C语言内存函数_第5张图片

2.2memmove函数的模拟实现

C语言内存函数_第6张图片

C语言内存函数_第7张图片

C语言内存函数_第8张图片

3. memset 函数的使用

void * memset ( void * ptr, int value, size_t num );

memset是用来设置内存的,将内存中的值以字节为单位设置成想要的内容。

设置字符:C语言内存函数_第9张图片

设置整型:C语言内存函数_第10张图片

4. memcmp 函数的使用

int memcmp ( const void * ptr1, const void * ptr2, size_t num );

memcmp--比较ptr1的前num个字节和ptr2的前num个字节做比较

C语言内存函数_第11张图片

比较字符:C语言内存函数_第12张图片

比较整型:C语言内存函数_第13张图片

补充一些零散的额外知识点:

sizeof(数组名):只有在定义数组的时候才代表整个数组,在传参的时候,并不代表整个数组 

在linux下,assert宏不管是在debug,还是在release版本下,都会起作用
如果循环读入字符串的话,scanf()遇到空格,就停止读取,一定要用gets()才能完整的读取一个字符串

在#if 0 和#endif 之间的代码是不参与编译的


总结

好了,本篇博客到这里就结束了,如果有更好的观点,请及时留言,我会认真观看并学习。
不积硅步,无以至千里;不积小流,无以成江海。

你可能感兴趣的:(C语言,c语言)