- 数组名:数组名,带上行数、列数,只需要一个参数。 缺点是:数组的行、列都必须是固定大小的。
- 数组名(数组指针): 数组名(数组指针),带上列数,需要2个参数。 缺点是:数组列必须是固定大小的。
- 二维指针(指针数组):二维指针,需要3个参数,最灵活。 缺点是:调用的时候二维数组需要做转化。
示例如下:
#include <stdio.h>
void output1(int a[3][4]) // 数组名,带上行数、列数,只需要一个参数。 缺点是:数组的行、列都必须是固定大小的。
{
printf("Call OutPut1:\n");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
printf("%d ", a[i][j]);
}
printf("\n");
}
printf("\n");
return;
}
void output2(int (*a)[4], int n) // 数组名(数组指针),带上列数,需要2个参数。 缺点是:数组列必须是固定大小的。
{
printf("Call OutPut2:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < 4; j++) {
printf("%d ", a[i][j]);
}
printf("\n");
}
printf("\n");
return;
}
void output3(int **a, int n, int m) // 二维指针,需要3个参数,最灵活。 缺点是:调用的时候二维数组需要做转化。
{
printf("Call OutPut3:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
printf("%d ", a[i][j]);
}
printf("\n");
}
printf("\n");
return;
}
int main() {
int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
output1(a); //数组名
output2(a, 3); // 数组指针
int *p[3]; // 指针数组
for (int i = 0; i < 3; i++) {
p[i] = a[i];
}
output3(p, 3, 4); // 指针数组,数组需要做一步转化
return 0;
}