前言
在最近使用素数筛的过程中,可以使用memset(函数)来简化初始化数组,避免使用for循环进行初始化
通俗地讲memset是计算机中C/C++语言初始化函数。他的作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作。
函数介绍
初步理解:将已开辟内存空间 s 的首 n 个字节的值设为值 ch
---->从地址s开始,将当前位置后面的n个字节用ch替换并返回s。
进一步理解:对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化,毕竟他的头文件引用是 string.h
#include<string.h>
void *memset(void *p, int ch, size_t n);
起始地址 设定值 n个字节
函数的定义
还是先上定义,memset简单来说就是从一个地址(ptr)开始,将连续的(num)大小的内存设置为value(它其实是一字节一字节地把整个数组设置为一个指定的值)
比如在常见的素数筛(欧拉筛/线性筛)中我们就可以使用memset()来初始化
如下:
`memset(arr,1,sizeof(arr));`
//这里sizeof(arr)是代替了个数的大小,将整个数组初始化为设定值(1)
//当然也可以将sizeof换为5
//那么他的含义就是从arr[0](地址)开始,依次将五个连续的内存块(取决于数据类型)
//设置为我们设置的值(此处为1)
函数的实现样例
memset的常见使用
- memset() 函数常用于内存空间初始化。
- memset可以很快地清空一个结构类型的变量或数组。
- memset()的深刻内涵:用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化
注意
- 表达式中的arr 其本质是一个地址(arr[0])
详情移步----->数组详解 - memset是以byte为单位赋值的
- memcpy用来做内存拷贝,你可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度,但是要小心长度的溢出例:
char a[100],b[50]; memcpy(b, a, sizeof(b));
如用sizeof(a),会造成b的内存地址溢出。
- strcpy就只能拷贝字符串了,它遇到’/0’就结束拷贝
进一步了解原理---->memset函数的原理及其日常用法