怎么用函数传递二位数组

来源:百度知道 编辑:UC知道 时间:2024/05/22 14:11:59
比如有这样数组
const int MaxX=5;
const int MaxY=5;
int b[MaxX][MaxX];
怎么把一个二维数组传递到一个函数里去呢?函数的形参怎么设置?
让我满意可以再加分。

可以用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以指定所有维数的大小,也可以省略第一维的大小说明,如:
  void Func(int array[3][10]);
  void Func(int array[][10]);
  需要模仿编译器的行为把array[i][j]这样的式子手工转变为:
  *((int*)array + n*i + j);
  在调用这样的函数的时候,需要注意一下,如下面的例子:
  int a[3][3] =
  {
  {1, 1, 1},
  {2, 2, 2},
  {3, 3, 3}
  };
  Func(a, 3, 3);

你这个是C++吧?C里面还真不能用const常量定义数组。不过没关系,作为参数都是一样的。

方法1:以数组指针作为形参,函数声明为
(返回类型) function( int (*p)[MaxY],int x );

(返回类型) function( int p[][MaxY], int x );
调用时形参x的位置以二维数组b的行数作为实参取代;

方法2:以指针数组作为形参,函数声明为
(返回类型) function( int **p, int x, int y );

(返回类型) function( int *p[], int x, int y );
调用时,形参x,y的位置以二维数组b的行数和列数作为实参取代。

抱歉,前面方法2给记错了,现在可以了,要注意的是,方法2虽然有行列数可变的优势,但在调用前必须将二维数组改写为指针数组(*p[]形式)才可用。

例子:
#include <stdio.h>

#define MaxX 5
#define MaxY 5

int average1( int **p, int x, int y );
int average2(