memset是按照字节赋值,一个字符是一个字节,因此对字符数组可以初始化为任何值,而对int数组就不是这样了
例如:常用memset(a,-1,sizeof(a))
原理就是:-1在计算机储存是11111111,int是四个字节,每个字节(一个字节八位)全部赋值为-1,因此32位2进制结合起来就是-1
11111111 11111111 11111111 11111111
而memset(a,1,sizeof(a))却不行,每个字节赋值为1
00000001 00000001 00000001 00000001 ,这样32位2进制换算为10进制并不是1
而memset(a,0,sizeof(a))同理,每个字节赋值为0,32为2进制还是0
00000000 00000000 00000000 00000000
memset还有一个用法,有时候通常需要用到一个无穷大值,例如 0x7fffffff 值为 2147483647 或者 0x3f3f3f3f 值为 1061109567 。
我们通常不会选择前者,因为前者如果加一个数就会存在溢出的问题,通常选择后者 大于10^9并且远远小于 32-bit int 的范围,不会存在溢出的风险,并且我们可以直接用memset来初始化
memset(a, 0x3f, sizeof(a)) ,因为 0x3f3f3f3f 的每个字节刚好是 0x3f ,这样就可以达到初始化的效果。