c语言 二维数组指针函数问题。
原型如下:intR1[3][3]={1,1,1,1,1,1,1,1,1};intxyf1[3][4]={1,1,1,1,1,1,1,1,1,1,1,1};/*intXYZ...
原型如下:
int R1[3][3] ={1,1,1,1,1,1,1,1,1};
int xyf1[3][4]={1,1,1,1,1,1,1,1,1,1,1,1};
/*int XYZ1[3][4]={0,0,0,0,0,0,0,0,0,0,0,0};*/
int XYZ1[3][4];
int i,j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
XYZ1[i][j] = 0;
for (int k = 0; k < 3; k++)
{
XYZ1[i][j] += R1[i][k] * xyf1[k][j];
}
}
}
可以正常运行。
写成函数形式,
void xc(int **R1,int **xyf1,int **XYZ1,int m,int n, int p )
{
for (int i = 0; i < m; i++)
{
for (int j = 0; j < p; j++)
{
XYZ1[i][j] = 0;
for (int k = 0; k < n; k++)
{
XYZ1[i][j] += R1[i][k] * xyf1[k][j];
}
}
}
}
调用:xc((int **)R1,(int **)xyf1,(int **)XYZ1,3,3,4);
错误:
该怎么修改啊??函数用二维指着不变。 展开
int R1[3][3] ={1,1,1,1,1,1,1,1,1};
int xyf1[3][4]={1,1,1,1,1,1,1,1,1,1,1,1};
/*int XYZ1[3][4]={0,0,0,0,0,0,0,0,0,0,0,0};*/
int XYZ1[3][4];
int i,j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
XYZ1[i][j] = 0;
for (int k = 0; k < 3; k++)
{
XYZ1[i][j] += R1[i][k] * xyf1[k][j];
}
}
}
可以正常运行。
写成函数形式,
void xc(int **R1,int **xyf1,int **XYZ1,int m,int n, int p )
{
for (int i = 0; i < m; i++)
{
for (int j = 0; j < p; j++)
{
XYZ1[i][j] = 0;
for (int k = 0; k < n; k++)
{
XYZ1[i][j] += R1[i][k] * xyf1[k][j];
}
}
}
}
调用:xc((int **)R1,(int **)xyf1,(int **)XYZ1,3,3,4);
错误:
该怎么修改啊??函数用二维指着不变。 展开
展开全部
你定义的二维数组,数组名并不是一个int **类型的指针,而是一个int (* )[N]类型的指针,其中N是二维数组第2维的长度,如果还不懂可以追问我
改成这样就可以了:
#include<stdio.h>
void xc(int (*R1)[3],int (* xyf1)[4],int (* XYZ1)[4])
{
int i,j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
/*XYZ1[i][j] = 0;*/
for (int k = 0; k < 3; k++)
{
XYZ1[i][j] += R1[i][k] * xyf1[k][j];
}
printf("%d\t",XYZ1[i][j]);
}
printf("\n");
}
}
int main()
{
int R1[3][3] ={1,1,1,1,1,1,1,1,1};
int xyf1[3][4]={1,1,1,1,1,1,1,1,1,1,1,1};
int XYZ1[3][4]={0,0,0,0,0,0,0,0,0,0,0,0};
xc(R1,xyf1,XYZ1);
}
改成这样就可以了:
#include<stdio.h>
void xc(int (*R1)[3],int (* xyf1)[4],int (* XYZ1)[4])
{
int i,j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
/*XYZ1[i][j] = 0;*/
for (int k = 0; k < 3; k++)
{
XYZ1[i][j] += R1[i][k] * xyf1[k][j];
}
printf("%d\t",XYZ1[i][j]);
}
printf("\n");
}
}
int main()
{
int R1[3][3] ={1,1,1,1,1,1,1,1,1};
int xyf1[3][4]={1,1,1,1,1,1,1,1,1,1,1,1};
int XYZ1[3][4]={0,0,0,0,0,0,0,0,0,0,0,0};
xc(R1,xyf1,XYZ1);
}
更多追问追答
追问
这个矩阵相乘的目的是对于任意一个多维矩阵的,void xc(int (*R1)[3],int (* xyf1)[4],int (* XYZ1)[4])
这里面的数字可以改成自定义的吗?
追答
可以,如果你要动态,那么不能用int R1[3][3]的形式定义矩阵数组,如果你这样定义了数组,那么就没法自定义了
例如这样创建数组
#include
#include
int main()
{
int m,n,p;
int **R1;
int **xyz1;
printf("请输入矩阵1的行数:\n");
scanf("%d",&m);
if(m > 0)
{
R1 = (int **)malloc(sizeof(int *) * m);
}
printf("请输入矩阵1的列数:\n");
scanf("%d",&n);
if(n > 0)
{
int i,j;
for(i = 0; i < m; i++)
{
R1[i] = (int *)malloc(sizeof(int) * n);
for(j = 0; j < n; j++)
{
printf("请输入矩阵1的行:%d,列:%d的值\n",i+1,j+1);
scanf("%d",&R1[i][j]);
}
}
printf("打印矩阵如下:\n");
for(i = 0; i < m; i++)
{
for(j = 0; j < n; j++)
{
printf("%d\t",R1[i][j]);
}
printf("\n");
}
}
}
那么xc函数就可以用void xc(int **R1,int **xyf1,int **XYZ1,int m,int n, int p )这样的形式了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询