0

我已经编写了这段代码来输入 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);
}
4

2 回答 2

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);
}
于 2013-10-24T17:51:04.590 回答
0

使用单指针分配二维数组意味着连续分配内存。所以你不能使用像 a[i][j] 这样的下标,因为你需要正确指向指针

下面的代码显示了您如何使用单指针来存储二维数组,就像您可以在代码中实现的一样

#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;
}
于 2013-10-24T17:56:16.380 回答