在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赋值。大家能够多尝试几个数。