void *memset(void *ptr, int value, size_t num);
ptr
是指向要填充的内存块的指针。value
是要填充的值。num
是要填充的字节数。
memset原理:按字节进行填充,将指定的值(value
)复制到每个字节中。因此,memset
可以用于初始化内存块为任意字节值。
初始化是取出value的低字节(8位),按字节遍历内存块,设置值。
对于char数组可以任意初始化,‘a’,‘1’等字符均可,因为char本身只占一个字节。
对于int数组,int占四个字节,假设value为2,虽为int类型,取出最后一个字节为00000010,将此字节复制到目标内存中,对于每一个数组中的元素,变为00000010000000100000001000000010,因此无法正确初始化。
对于int数组,仅能正确初始化为两种值:0和-1(这两个值对应的二进制高位和地位完全相等,00000000000000000000000000000000,11111111111111111111111111111111)。
注意:num不是数组元素个数,应使用sizeof。
如果是new出来的,则sizeof计算后为4(指针),只能初始化第一个元素,应使用
sizeof(int) * length。