在C语言中文网中查到,memset()的原型为:
include <string.h>
void memset(void s, int c, unsigned long n);函数的功能为:将s指向的前n个字节单元,每个字节单元赋值为c。
例子:
int p = (int) malloc(10 * sizeof(int));
memset(p, 0, 10 * sizeof(int));
//可以用int p = (int) calloc(10, sizeof(int)); 代替,此例子为了说明memset的原理。以下内容出自:https://blog.csdn.net/a474617...
0和-1的二进制表示分别为0000 0000以及1111 1111,大家注意到1个int变量是占4个字节的,而memset每次只能给1个字节的内存单元赋值,但是因为刚好0000 0000 和1111 1111的高位低位都一样,所以memset就“凑巧”完成了每4个字节赋32位0和1。
因为1的二进制表示为0000 0001 所以4个字节连起来就是0000 0001 0000 0001 0000 0001 0000 00001,转换成10进制也就是16843009。这就说明并不是每一个10进制数都能正确用memset赋值。大家可以多尝试几个数。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。