关于二维数组与二维指针传递参数

原创 2007年10月06日 19:16:00
问题:  
    对于一矩阵A(m行n列), 矩阵B(n行p列),求其乘积C(m行p列),这其中要用到二维数组名当实参进行传递,但是怎么传递呢?形参用二维指针可以直接用吗?(如:int MatrixMultiplication(int **A, int **B, int **C, int ra, int ca, int rb, int cb), 这样是不行的!)
以下是两种可行的方法:

方法一: 形参用指向一维数组的指针 如: int (*p)[4]为一个指向一维数组的指针变量

#include <iostream>
using namespace std;

#define M 3
#define N 4
#define P 5

int MatrixMultiplication(int (*A)[N], int (*B)[P], int (*C)[P], int ra, int ca, int rb, int cb);

void main()
{
	int A[M][N] = {
		{1, 2, 3, 1},
		{3, 1, 5, 5},
		{8, 1, 6, 2} };

	int B[N][P] = {
		{1, 2, 3, 1, 0},
		{3, 1, 5, 2, 5},
		{0, 1, 6, 3, 1},
		{1, 0, 5, 2, 2} };

	int C[M][P];

	if (MatrixMultiplication(A, B, C, M, N, N, P) == 1)
	{
		for (int i = 0; i < M; i++)
		{
			for (int j = 0; j < P; j++)
			{
				cout << C[i][j] << " ";
			}
			cout << endl;
		}
	}
	else
	{
		cout << "ERROR!" << endl;
	}
}

int MatrixMultiplication(int (*A)[N], int (*B)[P], int (*C)[P], int ra, int ca, int rb, int cb)
{
	if (ca != rb)
		return 0;

	for (int i = 0; i < ra; i++)
	{
		for (int j = 0; j < cb; j++)
		{
			int sum = A[i][0] * B[0][j];
			for (int k = 1; k < ca; k++)
			{
				sum += A[i][k] * B[k][j];
			}

			C[i][j] = sum;
		}
	}

	return 1;
} 

方法二: 将函数写成这种形式也可以
int MatrixMultiplication(int A[][N], int B[][P], int C[M][P], int ra, int ca, int rb, int cb);
其余部分不变

二维数组与双重指针

一、简介: 1、二维数组     int array[10][10];     函数声明: void fun(int a[][10])     函数调用:fun(array);    ...
  • u013684730
  • u013684730
  • 2015年06月19日 22:09
  • 4590

二维指针和二维数组的关系

数组和指针的概念你没分清楚,数组的本质你没搞清楚。这是导致问题出现的根源。 int x[5]; 这个定义里面,我们说定义了一个数组x,此数组有5个数组元素,元素的类型为int类型。首先要问的是,x到...
  • a2796749
  • a2796749
  • 2014年11月11日 00:52
  • 1006

C/C++中二维数组和指针关系分析

在C/c++中,数组和指针有着密切的关系,有很多地方说数组就是指针式错误的一种说法。这两者是不同的数据结构。其实,在C/c++中没有所谓的二维数组,书面表达就是数组的数组。我猜想是为了表述方便才叫它二...
  • zhouxuguang236
  • zhouxuguang236
  • 2013年10月03日 18:02
  • 38598

二维指针和二维数组的区别

1、定义指向数组的指针,需要指定数组的列 char arr[][3]或char (*arr)[3];//二维数组本质上是一维数组 *p[3]指针数组;数组的每一个元素都是指针 **p二维指针;指...
  • llq108
  • llq108
  • 2015年04月12日 13:57
  • 1573

指针数组,数组指针与二维数组剖析

int *p[3]与int (*p)[3]的区别 *p[3]这个是一个指针数组,它所代表的意思是数组中的每一个元素都是一个指针变量,而(*p)[3],p是一个指针变量,表示指向一个含有3个整型元素的一...
  • qiumingjian
  • qiumingjian
  • 2015年05月06日 17:24
  • 3596

二维数组与数组指针的用法

#include using namespace std; int main() {    int v[2][10]={{1,2,3,4,5,6,7,8,9,10},{11,12,13,14,...
  • rongwenbin
  • rongwenbin
  • 2014年01月07日 15:01
  • 1681

二维数组的排列以及二维数组与指针例题

二维数组的排列: #include int main() {         int a[2][3],i,j;              printf("please intput by line...
  • u012402276
  • u012402276
  • 2016年08月12日 14:57
  • 898

关于二维数组和指针与传参

假设有一个二维数组a[M][N],要把它作为参数传给一个函数sub()
  • jnbbwyth
  • jnbbwyth
  • 2015年07月18日 18:27
  • 3530

二维数组名的本质是数组指针

#include int main() { int a[10] = {};//a是数组首元素的地址 int *p = a;//步长为4 int(*q)[10] = &a;//步长为4*10 ...
  • u014338577
  • u014338577
  • 2015年12月30日 10:00
  • 490

二维“数组”转换成二维“指针”

问题:cannot convert from 'double [10][10]' to 'double ** ' 例如:double arry[5][10] = {0};        double...
  • u011390632
  • u011390632
  • 2014年04月24日 23:50
  • 2038
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于二维数组与二维指针传递参数
举报原因:
原因补充:

(最多只允许输入30个字)