1.我也曾天真的以为 memset(a,0,sizeof(a))
中的0可以用任意数替换
实际上这是错误的
memset的功能是将一快内存中的内容以单个字节逐个拷贝的方式放到指定的内存中去。
2.介绍几个常用的 memset(a,-1,sizeof(a))
每个都会变为-1 memset(a,0,sizeof(a))
每个都会变为0 memset(a,0xnfnfnfnf,sizeof(a))
每个都会变为0xnfnfnfnf memset(a,0xnf,sizeof(a))
每个都会变为0xnfnfnfnf (可以看到简化了上面那句)
我们一般用n=3的情况(防止溢出) memset(a,0x3f,sizeof(a))
每个都会变为0x3f3f3f3f (可以看到简化了上面那句) memset(a,127,sizeof(a))
每个都会变为1061109567 memset(a,63,sizeof(a))
每个都会变为1061109567
也看到过有人写 memset(a,127/3,sizeof(a))
每个都会变为707406378
无穷大的值可采用上面的这些方法
无穷小的值 memset(a,128,sizeof(a))
每个都会变为-2139062144
解释:
128 (128的二进制是10000000)则放的是10000000 10000000 10000000 10000000 (转化为十进制)
因为最高位是1 所以是负数,因为这是补码,还原成原码 补码 10000000 10000000 10000000 10000000
反码 11111111 01111111 01111111 01111111
符号位不变,按位取反 原码 11111111 01111111 01111111 10000000
+1