吾爱程序员:这里有好玩的游戏和软件
当前位置:首页C语言教程 → 如何在C中将二维数组作为参数传递

如何在C中将二维数组作为参数传递

来源:网络 | 更新时间:2022-01-13 08:04:46
一维数组可以很容易地作为指针传递,但是将二维数组传递给函数的语法可能很难记住。传递多维数组的一个重要事项是,不必指定第一个数组维度。必须给出第二个(以及任何后续)维度 1) 当两个维度都全局可用时(作为宏或全局常量)。 

#include <stdio.h>
const int M = 3;
const int N = 3;

void print(int arr[M][N])
{
int i, j;
for (i = 0; i < M; i++)
for (j = 0; j < N; j++)
printf("%d ", arr[i][j]);
}

int main()
{
int arr[][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
print(arr);
return 0;
}
输出
1 2 3 4 5 6 7 8 9 
2) 当全局只有第二维可用时(作为宏或全局常量)。 

#include <stdio.h>
const int N = 3;

void print(int arr[][N], int m)
{
int i, j;
for (i = 0; i < m; i++)
for (j = 0; j < N; j++)
printf("%d ", arr[i][j]);
}

int main()
{
int arr[][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
print(arr, 3);
return 0;
}
输出
1 2 3 4 5 6 7 8 9 
如果第二维是固定的并且不是用户指定的,则上述方法很好。以下方法处理第二维也可以更改的情况。 3) 如果编译器与 C99 兼容  从 C99 开始,C 语言支持通过指定可变维度简单地传递可变大小的数组
// The following program works only if your compiler is C99 compatible.
#include <stdio.h>

// n must be passed before the 2D array
void print(int m, int n, int arr[][n])
{
int i, j;
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
printf("%d ", arr[i][j]);
}

int main()
{
int arr[][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int m = 3, n = 3;
print(m, n, arr);
return 0;
}
输出
1 2 3 4 5 6 7 8 9 
如果编译器不兼容 C99,那么我们可以使用以下方法之一来传递可变大小的 2D 数组。 4) 使用单个指针  在这种方法中,我们必须在传递给函数时对二维数组进行类型转换。   
#include <stdio.h>
void print(int *arr, int m, int n)
{
int i, j;
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
printf("%d ", *((arr+i*n) + j));
}

int main()
{
int arr[][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int m = 3, n = 3;

// We can also use "print(&arr[0][0], m, n);"
print((int *)arr, m, n);
return 0;
}
输出
1 2 3 4 5 6 7 8 9 
5) 使用指向数组的指针的概念
#include <stdio.h>
const int M = 3;


void print(int (*arr)[M])
{
int i, j;
for (i = 0; i < M; i++)
for (j = 0; j < M; j++)
printf("%d ", arr[i][j]);
}

int main()
{
int arr[][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
print(arr);
return 0;
}
输出
1 2 3 4 5 6 7 8 9 

最新文章

热点资讯

手游排行榜

CopyRight 2020-2030吾爱程序员

鄂ICP备2021004581号-8

本站资源收集于网络,如有侵权请联系我们:35492删除0109@qq.com