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

原创 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);
其余部分不变

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

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

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

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

二维数组和二级指针作为参数传给参数的方式

一.如果要将二维数组传给一个函数,有几种传参方式?    1).直接将二维数组传给函数。    eg:        void test(int arr[3][4]);    2).以数组指针的方式传...

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

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

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

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

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

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

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

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

用指针实现二维数组的转置

  • 2012年11月15日 18:47
  • 5KB
  • 下载

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

1. 二维数组   内存不是表状的,而是线状的,二维数组也是线性存储的,如char a[3][4]   二维数组、数组参数和指针参数" name="image_operate_2871312729...
  • mianyy
  • mianyy
  • 2011年08月23日 14:16
  • 135
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于二维数组与二维指针传递参数
举报原因:
原因补充:

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