void print_snare(int **arr, int n){


int i,j=0,k=0;


// j가세로


// k가가로


int count=0,flag=1;


int input_cn=0;


// 입력횟수카운트


int range=n; // 처음은n과같으나행렬연산이후n-1만큼감소됨


for(i=0;i<n;i++){


// 가로열부터입력


for(input_cn=0;input_cn<range;k+=flag){


arr[j][k]=++count;


input_cn++;


}


k-=flag;


count--; // 겹치는칸때문에count를한번-1 시킴


// 세로열입력


for(input_cn=0;input_cn<range;j+=flag){


arr[j][k]=++count;


input_cn++;


}


j-=flag;


flag*=-1;


k+=flag;


range--;


}


for(i=0;i<n;i++){


for(j=0;j<n;j++)


printf(\"%3d \", arr[i][j]);


printf(\"\\n\");


}


}


void ex2_main(){


int n;


int **arr;


int i;


printf(\"nxn의n 입력: \");


scanf(\"%d\",&n);


// 2차원배열의동적할당//


arr=(int**)malloc((sizeof(int*)*n));


*arr=(int*)malloc((sizeof(int*)*n*n));


for(i=1;i<n;i++)


arr[i]=&(arr[0][i*n]);


////////////////////////////


print_snare(arr,n);


free(arr);


}
void main(){
ex2_main();
}

만들어 놓고도 다시 만들라고 하면 못 만들듯...
막 코딩으로 만든거라 몇일전부터 달팽이 풀고 있던 형 보면 참고가 되면 좋겠당
2차원 배열 동적할당 이해 안가네
설명좀 해주실분 ㅠㅠ