memset の 那些事儿 (C++)

如果你在编程时开了一个数组

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 

整形(int) memset

首先可以

全部初始化成0

memset(a, 0, sizeof a)

然后是

全部初始化成一个很大的数 (0x3f3f3f3f)

memset(a, 0x3f, sizeof a);

这时候就有眼尖的小伙伴会问啦

“作者作者,不是说好的 0x3f3f3f3f 吗?”

哎,这就是 memset 的一个易错点

memset 啊,它是按字节来初始化的

众所周知,int  一共有 个字节      (不知道 int 多少字节的小伙伴可以戳这个 知识空投箱)

所以啊,我们这里只写一个 0x3f,它这样用 0x3f 来初始化 个字节 合在一起就是 0x3f3f3f3f

memset の 那些事儿 (C++)_第1张图片

(一个框一个字节) 

所以下次写 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

然后就发生了一个很有意思的事情

memset の 那些事儿 (C++)_第2张图片

 (一个框一个字节) 


浮点型(double) memset

全部初始化成0

跟整数是一样滴

memset(a, 0, sizeof);

全部初始化成一个很大的数 (1.38e+306)

memset(a, 127, sizeof);

全部初始化成一个很小的数 (2.93e+306) 

memset(a, 128, sizeof);

总结

没啥好总结的,

今天就到这里了,

哈,开玩笑的这里有一张图,包括了我讲的所有操作

memset の 那些事儿 (C++)_第3张图片

制作不易,留个赞再走吧

声明:这里double有精度问题,可能会出现答案错误

如果出现答案错误,一概不负责任

真正的考试中一般都得手动初始化成 0x3f3f3f3f 或 0x7f7f7f7f

你可能感兴趣的:(c++,之,杂事儿,c++,memset)