用C语言编写矩阵乘法函数,但是最后输出有问题
编写一个3*3的c矩阵和3*1的a向量的乘法,做为函数在主函数中调用,将a向量的地址传入函数中,做乘法运算,将结果放入3*1的b向量中,并依次打印,最后返回值为b的地址,在主函数中将b的地址赋值给一个指针,通过这个指针输出b向量中的三个数据,但是最后通过指针输出的数据和在函数中依次打印的数据不同,这是为什么?编写另外一个程序,就是在函数中,将b中的元素赋值给a,返回a的地址,这种方法打印出来结果就是相同的,程序代码:
#include <stdio.h> int process(int a[]) { float b[3],c[3][3]={1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9}; int i,j; for (i=0;i<3;i++) { float sum=0; for(j=0;j<3;j++) { sum=sum+c[i][j]*a[j]; } b[i]=sum; printf("%f\n",b[i]); } return b; } int main() { int a[3],i; float *p; for(i=0;i<3;i++) { scanf("%d",&a[i]); } p=process(a); for(i=0;i<3;i++) { printf("%f ",*p++); } return 0; }
此时打印出来是这样的结果
修改的代码主要是这一部分:
程序代码:
{ float c[3][3]={1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9}; int j=0,i=0; float b[3]; for (i=0;i<3;i++) { float temp=0; for(j=0;j<3;j++) { temp=temp+c[i][j]*a[j]; } b[i]=temp; printf("%f\n",b[i]); } for(i=0;i<3;i++) { a[i]=b[i]; } return a; }
输出结果是这样的: