Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 读写矩阵_C_Loops_Pointers - Fatal编程技术网

C 读写矩阵

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++) {

我写了这个代码来获取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++)
{
    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开始。