如何在C中填充和取消填充带有零的2D矩阵?

如何在C中填充和取消填充带有零的2D矩阵?,c,for-loop,matrix,C,For Loop,Matrix,我有一个N乘N的矩阵 Ex: 1 2 3 4 5 6 7 8 9 我需要得到N+2乘N+2的维数矩阵 Ex O/P - 0 0 0 0 0 0 1 2 3 0 0 4 5 6 0 0 7 8 9 0 0 0 0 0 0 然后,如果只给出填充矩阵,我还需要能够提取实际矩阵。我如何做到这一点?使用指针和指针数学很容易做到这一点。 我假设您已经可以访问矩阵维度 下面的代码允许您填充和取消填充矩

我有一个N乘N的矩阵

Ex:  1 2 3 
     4 5 6
     7 8 9
我需要得到N+2乘N+2的维数矩阵

Ex O/P -  0 0 0 0 0
          0 1 2 3 0
          0 4 5 6 0
          0 7 8 9 0
          0 0 0 0 0

然后,如果只给出填充矩阵,我还需要能够提取实际矩阵。我如何做到这一点?

使用指针和指针数学很容易做到这一点。 我假设您已经可以访问矩阵维度

下面的代码允许您填充和取消填充矩阵。我已经测试过不同的矩阵大小,因此它应该适用于任何方形矩阵:

#include <stdio.h>
#include <stdlib.h>

void pad(int *s,int *d,int dim);
void depad(int *s,int *d,int dim);
void prnt(int *s,int dim);

int main(void)
{
    int v[3][3]={{1,2,3},{4,5,6},{7,8,9}}; //example matrix
    int dim=3; //get dimension from program
    int *t;
    int *dpad;

    //mem alloc
    t = (int*) calloc((dim+2)*(dim+2),sizeof(int));
    dpad = (int*) calloc(dim*dim,sizeof(int));

    //--------------------------------------------
    printf("Initial matrix:\n");
    prnt(*v,dim);

    //--------------------------------------------
    printf("Padded matrix:\n");
    pad(*v,t,dim);
    prnt(t,dim+2);

    //--------------------------------------------
    printf("Depadded matrix:\n");
    depad(t,dpad,dim+2);
    prnt(dpad,dim);

    //free mem and return
    free(t);
    free(dpad);
    return 0;
}

void pad(int *s,int*d,int dim)
{
    int i,j;
    for(i=0;i<dim;i++)
        for(j=0;j<dim;j++)
            *(d+(i*(dim+2)+(dim+3+j)))=*(s+i*dim+j);
}

void depad(int *s,int *d,int dim)
{
    int i,j;
    dim=dim-2;
    for(i=0;i<dim;i++)
        for(j=0;j<dim;j++)
            *(d+i*dim+j)=*(s+(i*(dim+2)+(dim+3+j)));
}

void prnt(int *s,int dim)
{
    int i,j;
    for(i=0;i<dim;i++)
    {
        for(j=0;j<dim;j++) printf("%d ",*(s+dim*i+j));
        printf("\n");
    }   
}

我怀疑这是C代码。请贴一个。你试过什么的常见评论?。。。。