【第22期】观点:IT 行业加班,到底有没有价值?

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

原创 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);
其余部分不变
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

二维数组指针和函数参数

http://blog.chinaunix.net/uid-25324849-id-336253.html 前几天看到一段代码,是在函数参数中传递二维数组的例子,弄得很糊涂,最近看了一下书,...
  • chla
  • chla
  • 2015-01-09 08:51
  • 418

C++传递二维数组

c++之所以强大,其中重要原因之一就是支持指针,然而这也是c++最令人头痛的问题之一,其中二维数组作为参数传递就是其中之一。 一、关于一维数组 C++中一维数组作为函数参数传递应用十分普遍,原理和操作都十分简单。数组名就代表了数组的首地址,下标就是偏移量。函数的形式参数声明为一级指针即可(T...

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

二维数组参数传递 指针降级

先给出问题: 像下面这样的数组,在函数中如何传参?也就是说如何保证虚参与实参类型一致。 char str_arr[3][10] = {"yes","no","uncertain"}; cha...

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

首先,void f(a[ ][ ]);是不正确的定义 二维数据作为函数参数时,要明确指明二维数组的列数,这样编译器才能知道如何寻址。 正确的方式有: void f (a[4][6]); void f(a[ ][6]);//二维数组的行数可以省略</spa

如何在C函数中传递指向二维数组的指针参数

网上找的一篇文章 前几日用C编写DSP程序时,遇到一个问题:如何向C函数中传递指向二维数组的指针参数。初接触以为很简单,直接声明一个二维数组,然后把数组名传进去。但是一经编译便报错。后来...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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