如何让函数调用矩阵,并让函数返回矩阵。

purell 2011-03-22 11:19:05
在main 函数里有一段程序实现矩阵的乘法

int p[dx][dy];
for (int i=0; i<dx; ++i) {
for (int j=0; j<dy; ++j) {
for (int k=0; k<d2; ++k) {
p[i][j] += m1[i][k] * m2[k][j];
}
}
};

我想把它写成一个函数调用,参数是m1, m2, dx, dy 和dk, 函数返回乘积矩阵 p. 请问这个函数应该怎么写。
...全文
1090 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
微笑的鱼 2011-03-22
  • 打赏
  • 举报
回复
传引用类型的参数
yiyefangzhou24 2011-03-22
  • 打赏
  • 举报
回复
首先,你要是传入的是数组的地址的话,不需要返回,一切的操作豆子原数组上。
然后要是想返回数组的话
return a[][]; 或者定义一个二维数组指针,返回指针值
int **p;
return p;
qq120848369 2011-03-22
  • 打赏
  • 举报
回复

const int SIZE=100;
void multiMatrix(int m1[][SIZE],int m2[][SIZE],int dx,int dy,int dk,int p[][SIZE]);

int m1[SIZE][SIZE],m2[SIZE][SIZE],p[SIZE][SIZE],dx,dy,dk;
multiMatrix(m1,m2,dx,dy,dk,p);

wei801516 2011-03-22
  • 打赏
  • 举报
回复
main 返回????????不理解了。。。
你定义一个接受矩阵的函数不就好了????把矩阵的参数传进去呗!~
arong1234 2011-03-22
  • 打赏
  • 举报
回复
卡住就对了,本来这就不支持,你得用一维数组代替2维数组,写一个矩阵类来实现功能,直接用二维之中时不可能的
[Quote=引用 6 楼 huntrees 的回复:]
操,这题目巴拉我半天,2维指针卡住了, int A[2][3];int** p=A还不行了,我继续研究吧。说出来丢人啊
[/Quote]
purell 2011-03-22
  • 打赏
  • 举报
回复


比如

int m1[3][5];
int m2[5][3];
m3 = multiM(m1,m2, 3, 5,3)



函数是不是写成
int **p = multiM(int **x1, int **x2, dimRow1, dimColumn2, dimColumn1)



[Quote=引用 4 楼 huangjunyf2 的回复:]

传引用类型的参数
[/Quote]
赵4老师 2011-03-22
  • 打赏
  • 举报
回复
还不如定义三个全局二维数组,函数里面将‘一’ב二’的结果放进‘三’呢。
zjh860815 2011-03-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hurongfz 的回复:]
引用楼主 purell 的回复:
在main 函数里有一段程序实现矩阵的乘法
C/C++ code

int p[dx][dy];
for (int i=0; i<dx; ++i) {
for (int j=0; j<dy; ++j) {
for (int k=0; k<d2; ++k) {
p[i][j] += m1[i][k] * m2[k][j];
……
……
[/Quote]


建议看一下矩阵乘法的定义。 i * k阶矩阵乘以k * j矩阵,得到的i * j矩阵的每一个元素是k个乘积的和。
Huntrees 2011-03-22
  • 打赏
  • 举报
回复
不会啊,比如int A[2][3] int B[3][2],申明一个int(*p)[3]=A,int(*q)[2]=B;返回一个int(*g)[2];
要将p和q传递给multiMatrix中的参数,这里的参数应该怎么写呢,返回值应该怎么写呢。
hurongfz 2011-03-22
  • 打赏
  • 举报
回复
还是别用二维数组了用stl吧,方正是c++就用vector算了
hurongfz 2011-03-22
  • 打赏
  • 举报
回复
[Quote=引用楼主 purell 的回复:]
在main 函数里有一段程序实现矩阵的乘法
C/C++ code

int p[dx][dy];
for (int i=0; i<dx; ++i) {
for (int j=0; j<dy; ++j) {
for (int k=0; k<d2; ++k) {
p[i][j] += m1[i][k] * m2[k][j];
……
[/Quote]
矩阵乘好吧,可是为什么是3层循环啊,能不能解释下。不是说最后的结果是3*3矩阵吗?3重循环后是3*3矩阵? 很少做过二维数组,刚网上查了下,好像只能传指向数组的指针,而不能传二维数组。
Huntrees 2011-03-22
  • 打赏
  • 举报
回复
操,这题目巴拉我半天,2维指针卡住了, int A[2][3];int** p=A还不行了,我继续研究吧。说出来丢人啊
Huntrees 2011-03-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yiyefangzhou24 的回复:]
首先,你要是传入的是数组的地址的话,不需要返回,一切的操作豆子原数组上。
然后要是想返回数组的话
return a[][]; 或者定义一个二维数组指针,返回指针值
int **p;
return p;
[/Quote]
这个不能在原数组上做操作吧。理由很简单,3*2的矩阵和一个2*3的矩阵相乘,得到的是一个3.*3的矩阵,这个两个数组那个能盛下3*3的数组?

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧