zoukankan      html  css  js  c++  java
  • memset函数及注意事项

      memset函数的原型为:void * memset(void *ptr,int value,size_t num);用于为地址ptr开始的num个字节赋值value。

      memset函数的头文件为:C:<memory.h>或<string.h>    C++:<cstring>。

      在用memset为申请的数组赋值时,如果了解他的赋值原理,很有可能会造成一些不必要的隐形错误,令人头疼不已。memset函数在为数组(单个变量也可以)赋值时,是逐个字节赋值的,ptr开始的num个字节中的每个字节都赋值为value。所以我们就要注意了:

      (1)若ptr指向的是char型地址,value可以为任意字符值。(因为一个字符占一个字节);

      (2)若ptr指向的非char型地址(即最小存储单位不是一个字节的数据类型),如int型地址,要想赋值正确,value的值只能是-1或0,因为-1和0转换为二进制后每一位都是一样的,这里假设int型占四个字节,则-1=0XFFFFFFFF,0=0X00000000。

      例:正确赋值:

            int a[10];

            memset(a,-1,sizeof(a));

     

      赋值后a中元素为:0xFF 0XFF 0XFF 0XFF。因为int型占四个字节,memset的赋值方式是逐个字节进行赋值,所以元素的值实际上是四个字节合在一起的值:0XFFFFFFFF=-1。

      例:错误赋值:

            int a[10];

            memset(a,1,sizeof(a));

      赋值后a中元素为:0X01 0X01 0X01 0X01,即:0X01010101=16843009。

  • 相关阅读:
    loj6033.「雅礼集训 2017 Day2」棋盘游戏
    loj6032. 「雅礼集训 2017 Day2」水箱
    BZOJ 5217 [Lydsy2017省队十连测] 航海舰队
    P4173 残缺的字符串
    P3723 [AH2017/HNOI2017]礼物
    P3321 [SDOI2015]序列统计
    P4841 [集训队作业2013]城市规划
    MySQL基础
    MySQL查询
    HTTP响应码
  • 原文地址:https://www.cnblogs.com/SoundCoder/p/7635687.html
Copyright © 2011-2022 走看看