关于memset的使用
今天学了一下有关memset的使用
当然还是从网上找的资料
有一篇博客讲的挺好的
http://www.xuebuyuan.com/1442940.html
我总结一下今天学到的几点
1、关于memset的赋值原理
void *memset(*s, c, size_t n);
其中s为要开始赋值的首地址 c 位要赋值成的 n位长度
memset是以字节作为单位进行赋值的
所以int a[100]; memset(a, -1, sizeof(a)) memset(a, 0, sizeof(a))为合法的
而相应的memset(a, 1, sizeof(a)) 为不合法的
原因在于 对于一个整形数据 其占用四个字节 对于-1一个字节为11111111 所以四个字节为11111111 11111111 11111111 11111111 其值仍然为-1
对于0 亦是如此
而对于1 其一个字节0000001 四个字节 为0000001 0000001 0000001 0000001 该值不为1所以赋完值之后就会成为改数而不是1
所以对于int型的赋值要考虑四个字节的最大值
我的第一反应时0x7f然后试了一下 果然是够大 但是 我又在那篇文章最后看到了他的缺点
太大了
如果一个数加进来很容易就会炸了 就会成一个负数
然后作者又提供了一种很好的赋值叫0x3f 10^9多 正好够用
然后一个字符占一个字节 所以 对于字符型的数组 memset可以在ASCII之内随便赋值
对于bool型的数组 其也是占用一个字节 随便赋值