读写矩阵

时间:2013-10-24 17:34:23

标签: c loops pointers

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

2 个答案:

答案 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;
}