memset和fill
时间: 2023-10-19 13:30:46 浏览: 108
memset和fill都是用于填充内存块的函数。
memset函数用于将一块内存块按字节进行填充。它的声明如下:
```c
void *memset(void *ptr, int value, size_t num);
```
其中,`ptr`是指向要填充的内存块的指针,`value`是要填充的值,`num`是要填充的字节数。该函数会将内存块的每个字节都设置为给定的值。
例如,以下代码将一个整型数组中的所有元素都设置为0:
```c
int arr[5];
memset(arr, 0, sizeof(arr));
```
fill是C++标准库中的一个算法,它用于将容器中的元素按指定值进行填充。它的声明如下:
```cpp
template<class ForwardIt, class T>
void fill(ForwardIt first, ForwardIt last, const T& value);
```
其中,`first`和`last`分别是容器的起始和结束迭代器,`value`是要填充的值。该函数会将[first, last)范围内的所有元素都设置为给定的值。
例如,以下代码将一个vector容器中的所有元素都设置为1:
```cpp
std::vector<int> vec(5);
std::fill(vec.begin(), vec.end(), 1);
```
需要注意的是,memset函数是C语言中的函数,而fill是C++标准库中的算法函数,在C++中推荐使用fill来进行容器元素的填充。
相关问题
memset fill
`memset` 是一个 C 语言库函数,用于将一块内存区域填充为指定的值。它的原型如下:
```c
void *memset(void *s, int c, size_t n);
```
其中,`s` 是指向要填充的内存区域的指针,`c` 是要填充的值(以 `int` 类型表示),`n` 是要填充的字节数。
这个函数的作用是将 `s` 指向的内存区域的前 `n` 个字节都设置为值 `c`,返回值是指向填充后的内存区域的指针。
例如,下面的代码示例将一个整型数组 `arr` 的所有元素都设置为 0:
```c
#include <stdio.h>
#include <string.h>
int main() {
int arr[5];
memset(arr, 0, sizeof(arr));
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
输出结果为:`0 0 0 0 0`。
fill和memset
`fill` 和 `memset` 都用于将指定的内存区域设置为特定的值。它们的区别在于,`fill` 是 C++ 中的一个算法函数,而 `memset` 是 C 标准库中的一个函数。
`fill` 函数的语法如下:
```c++
template<class ForwardIt, class T>
void fill(ForwardIt first, ForwardIt last, const T& value);
```
这个函数将 `[first, last)` 区间内的每个元素都设置为 `value`。例如:
```c++
int arr[5] = {0};
std::fill(std::begin(arr), std::end(arr), 1);
// 现在 arr 中的所有元素都是 1
```
`memset` 函数的语法如下:
```c
void *memset(void *s, int c, size_t n);
```
这个函数将 `s` 指向的内存区域的前 `n` 个字节都设置为 `c`。例如:
```c
int arr[5] = {0};
memset(arr, 1, sizeof(arr));
// 现在 arr 中的所有元素都是 16843009 (即十六进制的 0x01010101)
```
需要注意的是,`memset` 只能设置每个字节的值,而无法针对数组元素进行设置。如果数组元素的类型是比较复杂的结构体或类,那么使用 `fill` 会更加方便和安全。
阅读全文