zoukankan      html  css  js  c++  java
  • 揭秘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完了指针,还是乘上数组的长度。同理,二维数组与动态存储(仅限这种申明方式)二位数组。

    keep going
  • 相关阅读:
    async/await
    js继承
    js处理上下文代码的2个阶段
    js相关地址
    vue自定义指令钩子函数
    vue 组件
    vue methods和computed,v-show和v-if
    vue 生命周期
    DOM操作——怎样添加、移除、移动、复制、创建和查找节点
    js 传递参数
  • 原文地址:https://www.cnblogs.com/MarkKobs-blog/p/10539257.html
Copyright © 2011-2022 走看看