使用指針和指針數學很容易實現這一點。 我會假設你已經有權訪問矩陣維度。
下面的代碼允許你填充和去填充你的矩陣。我已經測試過不同的矩陣大小,所以它應該可以與任何方形矩陣一起工作:
#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代碼。請發佈[mcve]。 – Olaf
「你試過什麼?」的常見評論... – nafas