memset赋值0和-1,还能赋其他值吗?

来源:互联网 发布:ios视频制作软件 编辑:程序博客网 时间:2024/06/10 09:49

今天用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赋值。大家可以多尝试几个数。



0 0