memset定义为
void *memset(void *s,int c, size_t n),即将s地址开始的连续n个字节(Byte)以参数c填写,然后返回指向s的指针,对初始化数组非常方便。
头文件:#include<string.h>
使用及误区:
1、数组初始化0:
将数组char a[n]初始化为0::memset(a,0,n),正确。
将数组int a[n]初始化为0:memset(a,0,n),错误。
正确用法为memset(a,0,n*sizeof(int))。
!!注意memset是按字节来填写值,故不同类型数据要计算好占用字节数。
2、数组填写其他值:
将数组char a[n]填写1::memset(a,1,n),正确。
将数组int a[n]填写1::memset(a,1,n),错误。memset(a,1,n*sizeof(int)),也错误。
memset是按字节来填值,故第一次错误是未计算对数组的大小;第二次虽然计算对数组的大小,但由于memset是按字节来填值,故数组a中每个元素都被按字节填写了1,即每个元素的值被填写为0x01010101,并非我们想要的0x00000001。
!!注意所以用memset对非字符型数组赋初值是不可取的! 可用for循环进行非字符数组赋初值。
原文:http://hi.baidu.com/jianghuzhijian/blog/item/27828cc445c21bc0d0006009.html