• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

memset()为什么只能赋0 和 -1

互联网 diligentman 2周前 (10-15) 14次浏览

在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。

memset()为什么只能赋0 和 -1

因为1的二进制表示为0000 0001 所以4个字节连起来就是0000 0001 0000 0001 0000 0001 0000 00001,转换成10进制也就是16843009。这就说明并不是每一个10进制数都能正确用memset赋值。大家可以多尝试几个数。


喜欢 (0)