在C语言中,传递二维数组作为函数参数时,有几种常见的方法。以下是几种常见方法的示例和说明。
方法一:显式指定列数
这种方法要求在函数定义中明确指定二维数组的列数(第二维的大小)。
#include <stdio.h>
#define ROWS 3
#define COLS 4
// 函数声明,列数必须明确指定
void printArray(int arr[ROWS][COLS], int rows);
int main() {
int array[ROWS][COLS] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
printArray(array, ROWS);
return 0;
}
void printArray(int arr[ROWS][COLS], int rows) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < COLS; j++) {
printf("%d ", arr[i][j]);
}
printf("n");
}
}
方法二:使用指针和动态内存分配
这种方法适用于不确定列数的情况,可以在运行时动态分配内存。
#include <stdio.h>
#include <stdlib.h>
void printArray(int** arr, int rows, int cols);
int main() {
int rows = 3;
int cols = 4;
// 动态分配内存
int** array = (int**)malloc(rows * sizeof(int*));
for (int i = 0; i < rows; i++) {
array[i] = (int*)malloc(cols * sizeof(int));
for (int j = 0; j < cols; j++) {
array[i][j] = i * cols + j + 1;
}
}
printArray(array, rows, cols);
// 释放内存
for (int i = 0; i < rows; i++) {
free(array[i]);
}
free(array);
return 0;
}
void printArray(int** arr, int rows, int cols) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%d ", arr[i][j]);
}
printf("n");
}
}
方法三:使用一维数组模拟二维数组
这种方法可以在函数定义中传递一个一维数组,并根据行数和列数进行索引计算。
#include <stdio.h>
#define ROWS 3
#define COLS 4
// 函数声明
void printArray(int* arr, int rows, int cols);
int main() {
int array[ROWS][COLS] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
// 传递一维数组的指针
printArray((int*)array, ROWS, COLS);
return 0;
}
void printArray(int* arr, int rows, int cols) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%d ", arr[i * cols + j]);
}
printf("n");
}
}
总结
以上方法展示了如何在C语言中传递二维数组作为函数参数。每种方法有其适用场景,可以根据具体需求选择合适的方法。
发布者:luotuoemo,转转请注明出处:https://www.jintuiyun.com/190478.html