C语言编写矩阵乘法函数,怎么使用动态内存分配?
想要编写一个可以调用的函数,能实现矩阵的乘法,矩阵的维数不固定,但是可以通过传参传入函数中,传入的参数中包括一个存放结果的矩阵,我使用了宏定义函数编写矩阵乘法,如果不想使用宏定义函数的话,该怎么写?遇到的问题是在定义函数参数时,矩阵的维数不能确定,不知道要怎么处理,动态内存分配也不太清楚应该在何处使用,请前辈指点。这是我写的宏定义函数实现的矩阵乘法
程序代码:
#include <stdio.h> #define MATRIX_PRINT(mtx) matrix_print( sizeof(mtx)/sizeof(*(mtx)), sizeof(*(mtx))/sizeof(**(mtx)), (mtx) ) #define MATRIX_MUT(a,b,c) matrix_mut(sizeof(a)/sizeof(*(a)),sizeof(*(a))/sizeof(**(a)),sizeof(*(b))/sizeof(**(b)),(a),(b),(c)) void matrix_print( size_t row, size_t col, float mtx[row][col] ) { size_t r=0,c=0; for( r=0; r<row; r++) { for( c=0; c<col; c++ ) { printf( "%f ", mtx[r][c]); } } } void matrix_mut(size_t row,size_t med,size_t col,float a[row][med],float b[med][col],float c[row][col]) { size_t i,j,l; for(i=0;i<row;i++) { for(j=0;j<col;j++) { float sum=0; for(l=0;l<med;l++) { sum=sum+a[i][l]*b[l][j]; } c[i][j]=sum; } } } int main( void ) { float a[2][3] = { {1,2,3}, {1,5,2} }; float b[3][2]={1,2,2,1,3,1}; float d[2][2]; MATRIX_MUT(a,b,d); MATRIX_PRINT( d ); return 0; }