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。因此咱们就要注意了:blog
(1)若ptr指向的是char型地址,value能够为任意字符值。(由于一个字符占一个字节);原型
(2)若ptr指向的非char型地址(即最小存储单位不是一个字节的数据类型),如int型地址,要想赋值正确,value的值只能是-1或0,由于-1和0转换为二进制后每一位都是同样的,这里假设int型占四个字节,则-1=0XFFFFFFFF,0=0X00000000。string
例:正确赋值:变量
int a[10];原理
memset(a,-1,sizeof(a));数据类型
赋值后a中元素为:0xFF 0XFF 0XFF 0XFF。由于int型占四个字节,memset的赋值方式是逐个字节进行赋值,因此元素的值其实是四个字节合在一块儿的值:0XFFFFFFFF=-1。二进制
例:错误赋值:im
int a[10];
memset(a,1,sizeof(a));
赋值后a中元素为:0X01 0X01 0X01 0X01,即:0X01010101=16843009。