关于memset

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 ,这样就可以达到初始化的效果。

posted @ 2020-07-25 16:21  Xxaj5  阅读(242)  评论(0编辑  收藏  举报