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

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

相关文章推荐

C++数组(二维数组)与指针 以及 函数传递/返回指针和数组参数

概论 指针基础 指针进阶 一维数组的定义与初始化 指针和数组 本文参考资料 C++ Primer, 5e; Coursera北大数据结构与算法课程。 1. 概论 指针在C\C...

二维数组和二级指针的传递问题

再一次的见证了自己的基础不牢靠。。。幸好发现得早,看见网上说,华为的一个面试题就考了这个方面的。 借那道华为的面试题引出问题,题目: char **p, a[16][8];  问:p=...

二维数组和二级指针的传递问题

转自:http://www.wutianqi.com/?p=1822 再次看这篇文章,感觉说的好多都是废话,在文章最前面补充一句话: “[]的优先级高于*”,大家可以带着这句话看下面的~~...

C++:二维数组和二级指针的传递问题

再次看这篇文章,感觉说的好多都是废话,在文章最前面补充一句话: “[]的优先级高于*”,大家可以带着这句话看下面的~~~ ======================== 再一次的见证了自己的基...

二维数组和二级指针的传递问题

引自:http://www.wutianqi.com/?p=1822借道面试题引出问题,题目:char **p, a[16][8];  问:p=a是否会导致程序在以后出现问题?为什么?可能有一部分朋友...

11、二维数组、数组参数和指针参数

1. 二维数组   内存不是表状的,而是线状的,二维数组也是线性存储的,如char a[3][4]   二维数组、数组参数和指针参数" name="image_operate_2871312729...

二维数组的动态分配及参数传递

1. C语言动态分配二维数组 (1)已知第二维 [cpp] view plaincopyprint? char (*a)[N];//指向数组的指针    a = (char ...

关于二维数组做函数参数,传递形参的形式的问题

数组作为参数进行传递,不能将数组的所用元素一次全都传进子函数中, 要么我们可以一次传进去数组中一个元素的内容,要么我们可以传一个数 组的指针,传递一维数组的指针这里不讲,只说一下传递二维数组时,二...

C语言中如何将二维数组作为函数的参数传递

转自:http://hi.baidu.com/outsmile/blog/item/38db95ede27206d2b31cb11d.html  今天写程序的时候要用到二维数组作参数传给一个函数,我...

参数传递二维数组

本文转自:   http://blog.csdn.net/yunyun1886358/article/details/5659851 今天在论坛上有朋友提问:声明函数如下void fun...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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