我已经编写了这段代码来输入r * c矩阵
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 <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);
}
答案 0 :(得分:0)
您已经分配了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);
}
答案 1 :(得分:0)
使用单指针分配2d dimesional数组意味着连续分配内存。所以你不能像[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;
}