memset是计算机中C/C++语言初始化函数。作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作。

头文件 <string.h>或 < cstringh >

函数介绍

include <string.h>

每种类型的变量都有各自的初始化方法,memset() 函数可以说是初始化内存的“万能函数”,通常为新申请的内存进行初始化工作。它是直接操作内存空间,mem即“内存”(memory)的意思。该函数的原型为:
void *memset(void *s, int c, unsigned long n);
void *memset(void *s, int ch, size_t n);
函数解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。
memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法 。
memset()函数原型是extern void *memset(void *buffer, int c, int count) buffer:为指针或是数组,c:是赋给buffer的值,count:是buffer的长度.

详细介绍

函数的功能是:将指针变量 s 所指向的前 n 字节的内存单元用一个“整数” c 替换,注意 c 是 int 型。s 是 void* 型的指针变量,所以它可以为任何类型的数据进行初始化。

memset() 的作用是在一段内存块中填充某个给定的值。因为它只能填充一个值,所以该函数的初始化为原始初始化,无法将变量初始化为程序中需要的数据。用memset初始化完后,后面程序中再向该内存空间中存放需要的数据。

memset 一般使用“0”初始化内存单元,而且通常是给数组或结构体进行初始化。一般的变量如 char、int、float、double 等类型的变量直接初始化即可,没有必要用 memset。如果用 memset 的话反而显得麻烦。

当然,数组也可以直接进行初始化,但 memset 是对较大的数组或结构体进行清零初始化的最快方法,因为它是直接对内存进行操作的。

这时有人会问:“字符串数组不是最好用’\0’进行初始化吗?那么可以用 memset 给字符串数组进行初始化吗?也就是说参数 c 可以赋值为’\0’吗?”

可以的。虽然参数 c 要求是一个整数,但是整型和字符型是互通的。但是赋值为 ‘\0’ 和 0 是等价的,因为字符 ‘\0’ 在内存中就是 0。所以在 memset 中初始化为 0 也具有结束标志符 ‘\0’ 的作用,所以通常我们就写“0”。

memset 函数的第三个参数 n 的值一般用 sizeof() 获取,这样比较专业。注意,如果是对指针变量所指向的内存单元进行清零初始化,那么一定要先对这个指针变量进行初始化,即一定要先让它指向某个有效的地址。而且用memset给指针变量如p所指向的内存单元进行初始化时,n 千万别写成 sizeof§,这是新手经常会犯的错误。因为 p 是指针变量,不管 p 指向什么类型的变量,sizeof§ 的值都是 4。

下面写一个程序:

# include <stdio.h>
# include <string.h>
int main(void)
{int i;  //循环变量char str[10];char *p = str;memset(str, 0, sizeof(str));  //只能写sizeof(str), 不能写sizeof(p)for (i=0; i<10; ++i){printf("%d\x20", str[i]);}printf("\n");return 0;
}

根据memset函数的不同,输出结果也不同,
分为以下几种情况:
1、memset(p, 0, sizeof§); //地址的大小都是4字节
0 0 0 0 -52 -52 -52 -52 -52 -52

2、memset(p, 0, sizeof(*p)); //*p表示的是一个字符变量, 只有一字节
0 -52 -52 -52 -52 -52 -52 -52 -52 -52

3、memset(p, 0, sizeof(str));
0 0 0 0 0 0 0 0 0 0

4、memset(str, 0, sizeof(str));
0 0 0 0 0 0 0 0 0 0

5、memset(p, 0, 10); //直接写10也行, 但不专业
0 0 0 0 0 0 0 0 0 0

C++学习——memset函数详解相关推荐

  1. c++ memset 语言_C/C++ 中memset() 函数详解及其作用介绍

    memset 函数是内存赋值函数,用来给某一块内存空间进行赋值的: 包含在头文件中,可以用它对一片内存空间逐字节进行初始化: 原型为 : void *memset(void *s, int v, si ...

  2. memset函数详解

    memset函数详解 memset函数为初始化函数,可以将一段连续的内存初始化为某个值. 但它是以字节为单位进行初始化的. memset函数的一般使用格式为 memset(首地址,值,sizeof(地 ...

  3. c语言memset对应java,C语言memset函数详解

    C语言memset函数详解 memset() 的作用:在一段内存块中填充某个给定的值,通常用于数组初始化与数组清零. 它是直接操作内存空间,mem即"内存"(memory)的意思. ...

  4. Memset 函数详解

    Memset函数详解 需要的头文件 在C中<string.h> 在C++中<cstring> 函数介绍 memset 原型:extern void *memset(void * ...

  5. memset()函数详解

    1.头文件 C中为<memory.h> 或 <string.h> C++中为<cstring> 2.原型及作用 void *memset(void *s,int c ...

  6. memset函数及其用法,C语言memset函数详解

    在前面不止一次说过,定义变量时一定要进行初始化,尤其是数组和结构体这种占用内存大的数据结构.在使用数组的时候经常因为没有初始化而产生"烫烫烫烫烫烫"这样的野值,俗称"乱码 ...

  7. C++中memset函数详解

    memset函数定义于<string.h>头文件中. 函数原型: void *memset(void *s,int c,unsigned long n); 函数功能:为指针变量s所指的前n ...

  8. C语言中memset函数详解(很清晰易懂)

    功 能: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作 用 法: void *memset(void * ...

  9. C语言中memset函数详解

    功 能: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作 用 法: void *memset(void * ...

最新文章

  1. Python之pip命令指定安装源和版本
  2. 安装ccs5.5总出现错误_《西游记》“斗法降三怪”,出现错误而补拍,观众总觉得改过结尾...
  3. C++ STL与迭代器
  4. Java蓝桥杯——逻辑推理练习题
  5. poj 楼天成的男人八题系列 A New Stone Game 博弈问题
  6. iOS简单实现查看更多/收起的效果
  7. mysql 中 where条件的OR 和 and 加括号的说法
  8. 深入浅出MFC:动态创建控件
  9. android 跨应用服务,跨应用启动Service,出现空指针
  10. #二、股价和时间转换(江恩箱)
  11. echarts tooltip属性加背景图片
  12. kindle 4.1.1越狱换中文字体
  13. 内存泄漏导致的浏览器崩溃
  14. tomca的用户设置
  15. spring 定时任务的 执行时间设置规则
  16. 【转载】自然界通用的“质子缓存”模型
  17. 什么是期权?期权案例说明
  18. Spring文件上传和连接重置问题
  19. 微信发送验证码进行验证
  20. Guns项目实战(完整)

热门文章

  1. 【论文翻译】Highlight Every Step: Knowledge Distillation via Collaborative Teaching
  2. 33.伪造ICMP请求包进行路由跟踪
  3. Linux 下载 更新 google 浏览器 chrome
  4. java游戏开发(java游戏开发教程)
  5. igs无法分配驱动器映射表_关于光盘读取二三事(解决UDF多次刻录无法读取问题)...
  6. LC-146.LRU 缓存
  7. 打开CMD与简单的Dos命令
  8. 【Lua】面向对象的实现原理
  9. 用几何法推导三角形重心坐标
  10. MPLS XXX路由汇总配置案例