int* matProduct(int* a, int* b, int rowa, int cola, int rowb, int colb)
{
int *p, *arow, *bcol;
if (rowb != cola || rowa <= 0 || rowb <= 0 || cola <= 0 || colb <= 0)
{
printf("无法相乘\n");
return NULL;
}
p = (int *)malloc(rowa * colb * sizeof(int));
arow = (int *)malloc(cola * sizeof(int));
bcol = (int *)malloc(rowb * sizeof(int));
int * q = p;
for (int i = 0; i < rowa; i++)
{
for (int k = 0; k < cola; k++)
arow[k] = a[i*cola + k];
for (int j = 0; j < colb; j++)
{
*q = 0;
for (int k = 0; k < rowb; k++)
{
bcol[k] = b[k*colb + j];
*q += arow[k] * bcol[k];
}
q++;
}
}
free(arow);
free(bcol);
return p;
}
int main()
{
int a[2][3] = { {1,2,3},{4,5,6} };
int b[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} };
int(*p)[4] = (int(*)[4])matProduct((int*)a, (int*)b, 2, 3, 3, 4);
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 4; j++)
printf("%d ", p[i][j]);
printf("\n");
}
free(p);
return 0;
}
{
int *p, *arow, *bcol;
if (rowb != cola || rowa <= 0 || rowb <= 0 || cola <= 0 || colb <= 0)
{
printf("无法相乘\n");
return NULL;
}
p = (int *)malloc(rowa * colb * sizeof(int));
arow = (int *)malloc(cola * sizeof(int));
bcol = (int *)malloc(rowb * sizeof(int));
int * q = p;
for (int i = 0; i < rowa; i++)
{
for (int k = 0; k < cola; k++)
arow[k] = a[i*cola + k];
for (int j = 0; j < colb; j++)
{
*q = 0;
for (int k = 0; k < rowb; k++)
{
bcol[k] = b[k*colb + j];
*q += arow[k] * bcol[k];
}
q++;
}
}
free(arow);
free(bcol);
return p;
}
int main()
{
int a[2][3] = { {1,2,3},{4,5,6} };
int b[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} };
int(*p)[4] = (int(*)[4])matProduct((int*)a, (int*)b, 2, 3, 3, 4);
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 4; j++)
printf("%d ", p[i][j]);
printf("\n");
}
free(p);
return 0;
}