如果你在编程时开了一个数组
int a[100010]
这是后你想把他全部赋值为一个很大的值(可能你用它来取min)
这时候,应该这样写
for (int i = 0; i < 100010; i ++) a[i] = 0x3f3f3f3f
//0x3f3f3f3f 是一个比较接近int_max的一个数,即1061109567
但是,因为 某些人比较懒 代码的简洁性 我们的主角就闪亮登场了!
memset!!!
(正片开始)
咳咳~~ 先等会儿
好像有些小伙伴不知道 0x 是什么?!
0x 就是代表十六进制的意思
0x ... 就代表这个数是十六进制
memset简单介绍
首先memset可以大范围初始化
具体写法是这样
memset(数组名, 初始化的值, sizeof 数组名);
头文件
#include <cstring>
整形(int) memset
首先可以
全部初始化成0
memset(a, 0, sizeof a)
然后是
全部初始化成一个很大的数 (0x3f3f3f3f)
memset(a, 0x3f, sizeof a);
这时候就有眼尖的小伙伴会问啦
“作者作者,不是说好的 0x3f3f3f3f 吗?”
哎,这就是 memset 的一个易错点
memset 啊,它是按字节来初始化的
众所周知,int 一共有 4 个字节 (不知道 int 多少字节的小伙伴可以戳这个👉 知识空投箱)
所以啊,我们这里只写一个 0x3f,它这样用 0x3f 来初始化 4 个字节 合在一起就是 0x3f3f3f3f
(一个框一个字节)
所以下次写 memset 的时候啊,千万别再写 0x3f3f3f3f 了
全部初始化成一个很小的数 (-2139062144)
memset(a, 128, sizeof a);
不要问为什么是 128 ,(我不知道),有dalao知道的话可以在评论区解答
全部初始化成一个-1
memset(a, -1, sizeof a);
这时候就有细心的小伙伴会问啦
“作者作者,不是说只会初始化一个字节嘛?为什么这里初始化 -1 就写 -1 呢?”
这只是一个巧合啊(真的不骗你)
为啥呢
因为,众所周知,-1 在计算机中的二进制(补码)是 32个1
那么,因为 memset 只能初始化一个字节所以是这里的 -1 就是 4个1
然后就发生了一个很有意思的事情
(一个框一个字节)
浮点型(double) memset
全部初始化成0
跟整数是一样滴
memset(a, 0, sizeof);
全部初始化成一个很大的数 (1.38e+306)
memset(a, 127, sizeof);
全部初始化成一个很小的数 (2.93e+306)
memset(a, 128, sizeof);
总结
没啥好总结的,
今天就到这里了,
哈,开玩笑的这里有一张图,包括了我讲的所有操作
制作不易,留个赞再走吧