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