猿问

如下图,参数表那里不太会用,求大神帮忙看一下!

matrix()函数生成矩阵,pri()函数输出矩阵。
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void matrix(int (*p)[n],int n)
{
int i,j;
srand(time(0));
for(i=0;i<n;++i)
for(j=0;j<n;++j)
*(*(p+i)+j)=rand()%10;
}
void pri(int (*p)[n],int n)
{
int i,j;
printf("随机生成的矩阵为:\n");
for(i=0;i<n;++i)
for(j=0;j<n;++j)
printf(j==n-1?"%-3d\n":"%-3d",*(*(p+i)+j),*(*(p+i)+j));
}
int main()
{
int n;
printf("请输入矩阵阶数:");
scanf("%d",&n);
int a[n][n];
matrix(a,n);
pri(a,n);
}



茅侃侃
浏览 116回答 2
2回答

明月笑刀无情

回答如下(程序中带//的行改过):#include <stdio.h>#include <time.h>#include <stdlib.h>void matrix(int *p,int n)//{int i,j;srand((unsigned int)time(0));//for(i=0;i<n;++i)for(j=0;j<n;++j)*(p+i*n+j)=rand()%10;//写成p[i*n+j]=...也对}void pri(int *p,int n) //{int i,j;printf("随机生成的矩阵为:\n");for(i=0;i<n;++i)for(j=0;j<n;++j){ printf("%-3d ",p[i*n+j]); if(j==n-1)printf("\n");}//}int main(){int n;printf("请输入矩阵阶数:");scanf("%d",&n);//int a[n][n]; 只有静态数组才能这样写,动态数组要动态分配int *a;a = (int*)malloc(sizeof(int)*n*n);matrix(a,n);pri(a,n);free(a);return 0;}

白衣非少年

错误在于对多维数组的认识不对多维数组不是多重指针,多维数组与一维数组是一样的,p[i][j]与*(p+i*n+j)等效。多维数组的位置最好自己计算(类似于*(p+i*n+j))。
随时随地看视频慕课网APP

相关分类

CSS3
Java
我要回答