读写矩阵

我写了这段代码来输入r * c矩阵

r – >行c – >列

当r c时无法产生正确的输出。

例:

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  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); } 

使用单指针分配2d dimesional数组意味着连续分配内存。所以你不能像[i] [j]那样使用下标,因为你需要正确地指向指针

下面的代码显示了如何使用单个指针来存储2D数组,这与您在代码中可以实现的内容相同

 #include #define COL 2 #define ROW 6 int main() { int *p,i,j; p=(int *)malloc(ROW*COL*sizeof(int )); for(i=0;i 

您已经分配了1-dim数组,但将其视为2-dim数组。 那要求惊喜:)

可能的修复:

 #include  void scanmatrix(int* a,int r,int c) { int i,j; for(i=0;i