//矩阵乘法,用列指针
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 10
int main()
{
int n;
printf("input a number:");//输入阶数
scanf("%d",&n);
int a[N][N]={0};
int b[N][N]={0};
srand(time(0));//随机赋值
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
a[i][j]=rand()%20;
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
b[i][j]=rand()%20;
}
}
int *pa=&a[0][0];
int *pb=&b[0][0];
int c[N][N]={0};
int *pc=&c[0][0];
for(int i=0;i<n;i++)//相乘
{
for(int j=0;j<n;j++)
{
for(int k=0;k<n;k++)
{
//(*(pc[i]+j))+=(*((pa+i)[k]))*(pb[k][j]);
pc[i*n+j]+=pa[i*n+k]*pb[k*n+j];
}
}
}
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
printf("----\n");
printf("pa[1*n+0]=%d\n",pa[1*n+0]);
for(int i=0;i<n;i++)//打印数组a
{
for(int j=0;j<n;j++)
{
printf("%4d",pa[i*n+j]);
}
printf("\n");
}
printf("\n");
for(int i=0;i<n;i++)//打印数组b
{
for(int j=0;j<n;j++)
{
printf("%4d",pb[i*n+j]);
}
printf("\n");
}
printf("\n");
for(int i=0;i<n;i++)//打印数组c
{
for(int j=0;j<n;j++)
{
printf("%4d",pc[i*n+j]);
}
printf("\n");
}
printf("\n");
return 0;
}
哪里出错了呀
结果是这样的
指针用的不对吗?