揭秘memset与sizeof的结合使用方法

memset与sizeof为什么经常结合起来用呢?

一.memset介绍

memset函数是C++中的一个函数,它将从给定地址开始,逐个字节刷内存,初始化它们为给定的参数。
基本用法:

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

因为它是逐字节地刷内存,所以参数num经常用sizeof()的方式写。

二.具体事例

1. 例1

  char str[] = "almost every programmer should know memset!";
  memset (str,'-',6);
  puts (str);

输出:

------ every programmer should know memset!

这里memset的第三个参数是6,也就是从首位&str[0]开始,到&str[5],全部替换为-,不过这里恰好是char类型在该系统上占内存1个字节,但换个系统假如是3个字节那么6可能就要缩水了,就只能把字符串的前两位,即al,替换成-

2. 例2

 int *B=new int[3];
 memset(B,-1,sizeof(B)); //错误
 memset(B,-1,sizeof(B)*3); //正确

以上是一段动态定义数组的方式,暂且认为在内存中连续存储(仅限这种申明方式),且使用了memset进行赋值。
显然,错误的方法没有意识到sizeof(B)并不是整个数组的占内存大小,而是指针所占内存大小。因为我们认为如果指针所占内存大小等于int类型所占内存大小的话,那么在sizeof完了指针,还是乘上数组的长度。同理,二维数组与动态存储(仅限这种申明方式)二位数组。

posted @ 2019-03-15 20:12  MarkKobs  阅读(919)  评论(0编辑  收藏  举报