C 读写矩阵
我写了这个代码来获取r*c矩阵的输入 r->行 c->columns 它可以正常工作时,钢筋混凝土 例如: r=6,c=2 输入: 1 2 3 4 5 6 7 8 9 10 11 12 输出: 1 2 11 12 5 6 11 12 11 12 11 12 请告诉我哪里出了问题。 我不想使用常量数组C 读写矩阵,c,loops,pointers,C,Loops,Pointers,我写了这个代码来获取r*c矩阵的输入 r->行 c->columns 它可以正常工作时,钢筋混凝土 例如: r=6,c=2 输入: 1 2 3 4 5 6 7 8 9 10 11 12 输出: 1 2 11 12 5 6 11 12 11 12 11 12 请告诉我哪里出了问题。 我不想使用常量数组 #include <stdio.h> void scanmatrix(int* a[],int r,int c) { int i,j; for(i=0;i<r;i++) {
#include <stdio.h>
void scanmatrix(int* a[],int r,int c)
{
int i,j;
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
scanf("%d",&a[i][j]);
}
}
}
void printmatrix(int* a[],int r,int c)
{
int i,j;
for(i=0;i<r;i++)
{
printf("\n\n");
for(j=0;j<c;j++)
{
printf("%d\t",a[i][j]);
}
}
}
int main()
{
int* a;
int r,c,i,j;
scanf("%d%d",&r,&c);
a=(int *)malloc(r*c*sizeof(int));
scanmatrix(&a,r,c);
printmatrix(&a,r,c);
return(0);
}
#包括
无效扫描矩阵(int*a[],int r,int c)
{
int i,j;
对于(i=0;i您已分配了1-dim阵列,但将其视为2-dim阵列。这是在寻求惊喜:)
可能的解决方案:
#include <stdio.h>
void scanmatrix(int* a,int r,int c)
{
int i,j;
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
int k = c*i+j;
scanf("%d",a+k);
}
}
}
void printmatrix(int* a,int r,int c)
{
int i,j;
for(i=0;i<r;i++)
{
printf("\n\n");
for(j=0;j<c;j++)
{
int k = c*i+j;
printf("%d\t",a[k]);
}
}
}
int main()
{
int* a;
int r,c,i,j;
scanf("%d%d",&r,&c);
a=(int *)malloc(r*c*sizeof(int));
scanmatrix(&a,r,c);
printmatrix(&a,r,c);
return(0);
}
#包括
无效扫描矩阵(int*a,int r,int c)
{
int i,j;
对于(i=0;i使用单指针分配二维数组意味着连续分配内存。因此,不能像[i][j]那样使用下标,因此需要正确地指向指针
下面的代码显示了如何使用单指针存储2D数组,这与您在代码中实现的相同
#include<stdio.h>
#define COL 2
#define ROW 6
int main()
{
int *p,i,j;
p=(int *)malloc(ROW*COL*sizeof(int ));
for(i=0;i<ROW;i++)
{
for(j=0;j<COL;j++)
{
scanf("%d\t",&p[i*COL+j]);
}
printf("\n");
}
for(i=0;i<ROW;i++)
{
for(j=0;j<COL;j++)
{
printf("%d\t",p[i*COL+j]);
}
printf("\n");
}
return 0;
}
#包括
#定义列2
#定义第6行
int main()
{
int*p,i,j;
p=(int*)malloc(ROW*COL*sizeof(int));
对于(i=0;ii,如果您想使用2个下标来访问或写入矩阵元素,如案例a[i][j],那么您可以使用双指针,使其易于使用,如p[i][j],行int k=c*(i-1)+j;
应该是int k=c*i+j;
,因为索引i
从0开始,而不是从1开始。