c++ 拷贝二维数组
时间: 2023-10-28 12:06:53 浏览: 406
要拷贝一个二维数组,你可以使用循环逐个复制元素或使用数组拷贝的方法。以下是使用数组拷贝方法的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
int arr1[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int arr2[3][3];
// 使用数组拷贝方法
for (int i = 0; i < 3; i++) {
memcpy(arr2[i], arr1[i], sizeof(int) * 3);
}
// 打印拷贝后的二维数组
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", arr2[i][j]);
}
printf("\n");
}
return 0;
}
```
以上代码通过使用`memcpy`函数将`arr1`的每一行拷贝到`arr2`中,实现了二维数组的拷贝。
相关问题
c++中深拷贝二维数组如何实现
在 C 语言中,深拷贝二维数组可以通过以下代码实现:
```c
#include <stdlib.h>
#include <string.h>
int main() {
int m = 3, n = 4;
int** arr = (int**)malloc(m * sizeof(int*));
for (int i = 0; i < m; i++) {
arr[i] = (int*)malloc(n * sizeof(int));
memset(arr[i], 0, n * sizeof(int));
}
// 填充原始数据
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
arr[i][j] = i * n + j;
}
}
// 深拷贝
int** copy = (int**)malloc(m * sizeof(int*));
for (int i = 0; i < m; i++) {
copy[i] = (int*)malloc(n * sizeof(int));
memcpy(copy[i], arr[i], n * sizeof(int));
}
// 打印拷贝结果
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
printf("%d ", copy[i][j]);
}
printf("\n");
}
return 0;
}
```
这段代码首先创建了一个 3x4 的二维数组,填充了一些数据。然后通过循环分配内存空间,用 memcpy 函数进行内存拷贝,最终得到一个新的拷贝二维数组,并打印了结果。这里使用了二重指针,从而可以动态分配内存空间,避免了访问越界等问题。
c++二维数组的深拷贝
二维数组的深拷贝可以通过使用循环来实现,如下所示:
```c
int **deepCopy(int **arr, int rows, int cols) {
int **newArr = (int **)malloc(rows * sizeof(int *));
for (int i = 0; i < rows; i++) {
newArr[i] = (int *)malloc(cols * sizeof(int));
for (int j = 0; j < cols; j++) {
newArr[i][j] = arr[i][j];
}
}
return newArr;
}
```
在这个例子中,我们首先动态分配一个新的二维数组 `newArr`,然后使用两个循环来遍历原始数组 `arr` 的每个元素并将其赋值给新数组 `newArr` 的对应元素。最后,我们返回新数组 `newArr`。
需要注意的是,在使用完新数组后,需要手动释放它的内存,以避免内存泄漏。这可以通过使用 `free()` 函数来实现,如下所示:
```c
void freeArray(int **arr, int rows) {
for (int i = 0; i < rows; i++) {
free(arr[i]);
}
free(arr);
}
```
在这个例子中,我们使用一个循环来释放每行的内存,然后再释放数组本身的内存。