方法一:使用指针来遍历整个数组
#include <stdio.h>
#define ROWS 3
#define COLS 4
void clearArray(int (*arr)[COLS], int rows) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < COLS; j++) {
arr[i][j] = 0;
}
}
}
int main() {
int arr[ROWS][COLS];
clearArray(arr, ROWS);
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
方法二:使用 memcpy 函数通过指针传参
#include <stdio.h>
#include <string.h>
#define ROWS 3
#define COLS 4
void clearArray(int (*arr)[COLS], int rows) {
int zeroArray[ROWS][COLS] = {0};
memcpy(arr, zeroArray, rows * COLS * sizeof(int));
}
int main() {
int arr[ROWS][COLS] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
clearArray(arr, ROWS);
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
总结
1、memcpy
- 函数需要包含 string.h 头文件。
memcpy(destination, source, size)
,将 source 的内容拷贝到 destination 中,size 为要拷贝的字节数。memcpy
在处理大量数据时通常比手动循环更高效,因为它可以利用底层的优化。
2、指针传递
- 与普通的数组传递相同,二维数组的首地址通过指针传递到函数中,允许对原数组进行操作。