c++中 memset 二维数组
时间: 2024-09-07 09:06:20 浏览: 51
`memset` 是 C/C++ 中的一个函数,用于将内存区域中的所有字节设置为特定的值。它定义在头文件 `<cstring>` 中,原型如下:
```cpp
void* memset(void* ptr, int value, size_t num);
```
该函数将 `ptr` 指向的内存区域的前 `num` 个字节都设置为 `value` 的低 8 位值。它通常用于初始化或重置内存区域。
对于 C++ 中的二维数组,如果数组是静态分配的(例如 `int arr[10][20];`),你可以使用 `memset` 来初始化数组的每个元素为某个特定值。例如,将数组的每个元素都初始化为 0,可以这样做:
```cpp
int arr[10][20];
memset(arr, 0, sizeof(arr));
```
这里的 `sizeof(arr)` 会得到整个二维数组的大小,单位是字节。因为二维数组在内存中是连续存储的,所以这样可以将所有的元素都设置为 0。
然而,如果二维数组是动态分配的(例如使用 `new` 分配),那么情况会更加复杂,因为 `memset` 只能用于处理连续的内存块。例如:
```cpp
int** dynamicArr = new int*[10];
for(int i = 0; i < 10; ++i) {
dynamicArr[i] = new int[20];
}
memset(dynamicArr, 0, sizeof(dynamicArr)); // 错误使用,只会初始化指针为0
```
上面的代码只会初始化指针数组 `dynamicArr` 中的指针为 0,而不会初始化指针指向的内存区域。正确的方法应该是遍历每个指针,并对每个分配的数组使用 `memset`:
```cpp
for(int i = 0; i < 10; ++i) {
memset(dynamicArr[i], 0, sizeof(int) * 20);
}
```
这会将每个动态分配的一维数组中的所有元素都初始化为 0。
阅读全文