memset的使用

https://blog.csdn.net/qq1169091731/article/details/51934504
相信大家都会用string.h下的memset 赋值吧。

很简单,特别是对于搜索时候 vis数组的赋值,最小生成树和最短路的used数组也不错。

但是,都知道memset只能赋0和-1

内部机构是通过按位来实现的。

而这次,来讲一下memset赋大值。

我们可以用memset赋 0xkfkfkfkf 的值(k=1,2,3…7) 后面8,9对于int型有些超范围啊

这样,我们可以给一些数组赋值,

在图论中先对 数组内容赋值,要赋一个很大的值,一般用for循环,

这里,我们就可以用memset 来赋值啦~

之前在博客里我也提到过,赋值0x7fffffff(对于int 型来说 0x7fffffff是最大的数)是不能过的,

因为在里面会有加法,两个这么大的数加起来会成为一个负数,从而影响到题目的答案。

所以,赋值要小于0x7fffffff的一半,而恰巧能通过memset来赋值的。

最大的也就是0x3f3f3f3f,所以可以看到有很多人代码中,

最大值一般用0x3f3f3f3f来表示。

其实,memset是按最后面的来填充。

只管后面的两个字符,然后前面的直接就复制过去。

所以 memset( a,0x3f,sizeof(a) ) 等同于 memset( a,0x3f3f3f3f,sizeof(a) )

同理对于,0xnf 等同于 0xnfnfnfnf (n=1,2,3…)

但有时候我们要对数组内容进行比较。

在memset的时候 电脑知道给数组赋值成0x3f3f3f3f 但 比较的时候 0x3f != 0x3f3f3f3f

所以,MAX 设置成0x3f3f3f3f。

当然,如果你不在头声明宏定义或者常量,memset也可以直接用0xnf

还有一点,我说的这些仅仅是对于int类型的测试,double什么的,还没有去测试过

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值