今天用memset时发现它不能给一个数组赋值1,于是就花时间了解了一下它。先上msdn的介绍:
memset
Sets buffers to a specified character.
void *memset( void *dest, intc, size_tcount );
Return Value
memset returns the value ofdest.
Parameters
dest
Pointer to destination
c
Character to set
count
Number of characters
Remarks
The memset function sets the firstcount bytes ofdest to the character c.
最后一句翻译过来就是:memset函数将dest所指的前count字节的内存空间赋值为c。先看一段程序吧
很容易知道0和-1的二进制表示分别为0000 0000以及1111 1111,大家注意到1个int变量是占4个字节的,而memset每次只能给1个字节的内存单元赋值,但是因为刚好0000 0000 和1111 1111的高位低位都一样,所以memset就“凑巧”完成了每4个字节赋32位0和1,也就是十进制的0和-1.那换成其他的行吗?再看一段程序。
因为1的二进制表示为0000 0001 所以4个字节连起来就是0000 0001 0000 0001 0000 0001 0000 00001,转换成10进制也就是16843009。这就说明并不是每一个10进制数都能正确用memset赋值。大家可以多尝试几个数。