关于矩阵相乘结果输出二维数组的问题

jackhu 2003-04-01 05:01:52
请教各位老师,以下的程序想将矩阵相乘结果输出二维数组c[][],却提示“error C2664: 'matrixmulti' : cannot convert parameter 2 from 'int' to 'int [][10]'”的错误如何解决?谢谢先
#include "stdafx.h"
#include "stdio.h"
#define max 10
void matrixmulti(int n,int a[max][max],int b[max][max]/*,int c[n][n]*/)
{
int c[max][max];
int i,j,k,x;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
x=0;
for(k=0;k<n;k++)
x+=a[i][k]*b[k][j];
c[i][j]=x;
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
printf("5d",c[i][j]);
printf("\n");
}

}
void main(int argc, char* argv[])
{
int a[4][4]={{1,2,3,4},{4,3,2,1},{5,6,7,8},{11,22,33,44}};
int b[4][4]={{44,33,22,11},{1,2,3,4},{8,7,6,5},{2,3,4,5}};
// int c[4][4];
matrixmulti(4,a[4][4],b[4][4]);
}

...全文
193 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackhu 2003-04-01
  • 打赏
  • 举报
回复
thanks very much to fireinsky(喜子),please check the value that i have given you.
fireinsky 2003-04-01
  • 打赏
  • 举报
回复
又或者,你可以在函数参数中把数组大小以变量int count(或其他名字)传递给函数,那样也可以,就用不着max了,那样更好呀:)
fireinsky 2003-04-01
  • 打赏
  • 举报
回复
那你可以在主函数中把:
void main(int argc, char* argv[])
{
int a[4][4]={{1,2,3,4},{4,3,2,1},{5,6,7,8},{11,22,33,44}};
int b[4][4]={{44,33,22,11},{1,2,3,4},{8,7,6,5},{2,3,4,5}};
// int c[4][4];
matrixmulti(4,a[4][4],b[4][4]);
}
改为:void main(int argc, char* argv[])
{
int a[max][max]={{1,2,3,4},{4,3,2,1},{5,6,7,8},{11,22,33,44}};
int b[max][max]={{44,33,22,11},{1,2,3,4},{8,7,6,5},{2,3,4,5}};
// int c[max][max];
matrixmulti(4,a,b);
}
然后在具体使用时,max为几就在开始时定义为几呀:),比如在本题中就
#define max 4
就OK了:)
jackhu 2003-04-01
  • 打赏
  • 举报
回复
谢谢喜子:
如果我想方便自己,先用宏定义最大下标,以后可以灵活改变最大下标值。如何实现?
fireinsky 2003-04-01
  • 打赏
  • 举报
回复
你把max改为4就对了
fireinsky 2003-04-01
  • 打赏
  • 举报
回复
在C语言中是不允许这种情况的:
当数组为参数时,实参的数组大小不能少于形参,否则不行,你的形参a[max][max]就是大于实参a[4][4],所以不行
第三个参数有同样的问题存在。
jackhu 2003-04-01
  • 打赏
  • 举报
回复
to fireinsky(喜子):
我改后编译仍不通过呀?
cannot convert parameter 2 from 'int [4][4]' to 'int [][10]'
fireinsky 2003-04-01
  • 打赏
  • 举报
回复
最大的错误是你的max为10,而你的参数数组为4*4的,这是不允许的,你干脆把max改为4就对了
jackhu 2003-04-01
  • 打赏
  • 举报
回复
将main中的调用改为
matrixmulti(4,a[][],b[][]);后仍然有错呀?
fireinsky 2003-04-01
  • 打赏
  • 举报
回复
其次要把
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
printf("5d",c[i][j]);
printf("\n");
}
中的5d前面加一个%
fireinsky 2003-04-01
  • 打赏
  • 举报
回复
你这里有好几处错,首先就是把matrixmulti(4,a[4][4],b[4][4]);改为
matrixmulti(4,a,b);
jackhu 2003-04-01
  • 打赏
  • 举报
回复
smwu老师:
我该如何改正呢?
smwu 2003-04-01
  • 打赏
  • 举报
回复
我得叫你老大先
a[4][4]这这这 分明就是值啊 不是数组啊

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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