C语言 在函数中传递二维数组作为参数


#include<stdio.h>
void print(int r, int c, int Ar[][c])
{
int i,j;
printf("n");
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
printf("%d ",Ar[i][j]);
printf("n");
}
}
int main()
{
int m,n,i,j;
int A[100][100];

printf("Enter number of rows and columns matrix: ");
scanf("%d%d", &m, &n);
printf("Enter elements of first matrix:n");
for (i=0;i<m;i++)
{
for (j=0;j<n;j++)
scanf("%d",&A[i][j]);
}
print(m,n,A);
return 0;
}

输出:输入行数和列数矩阵:2 3输入第一个矩阵的元素:2 1 35 4 6

2 1 30 0 0

为什么不打印第二行?

编辑:这个问题被标记为c++之前…


如果你想传递一个普通的旧c数组给一个函数,你有两种可能。

  1. 通过引用
  2. 通过指针传递

你所使用的,甚至不能编译。

在c++中数组必须有一个编译时已知的大小。

请见:

void function1(int(&m)[3][4])   // For passing array by reference
{}
void function2(int(*m)[3][4])   // For passing array by pointer
{}
int main()
{
int matrix[3][4]; // Define 2 dimensional array
function1(matrix);  // Call by reference
function2(&matrix); // Call via pointer 
return 0;
}

无论如何。使用像std::arraystd::vector这样的现代c++容器几乎总是更好的解决方案。

下面的程序只在你的编译器是C99兼容的情况下才能工作

#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;
}

最新更新