memset 与 fill 函数的区别

发布时间 2023-06-23 22:02:32作者: 起汐Yuics

在使用时发现 memsetfill 函数有异同,为了防止考试的时候挂分,专门了解了一下。

memset 函数

由于 memset 的底层实现是类似二进制实现的字节赋值,只能赋为 \(0\)\(1\), \(INF\)\(-INF\),有比较大的局限性。

举个例子:

\(int\) 类型有 \(4\) 个字节,每个字节有 \(8\) 个数字,一个字节一个字节赋值

如:

[0000000 00000000 00000000 0000000]

比如说 memset 设置为 \(1\)

那么就是

[000000100000001000000010000001]

使用 memset(a, 0x3f, sizeof(a)); 将数组初始化为无穷大。

虽然也可以使用 \(\texttt{0x7F}\) 但是我们并不推荐,因为在做加法的时候,这个数组的数据容易溢出。相反,使用 \(\texttt{0x3F}\) 则可以保证在 \(1e9\) 的范围内不会加法运算溢出。

在实际使用中总会觉得 memset 慢了,不如手动。