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。