写了2种。 第一种 数组a[3][4] 转置为 b[4][3]。第2种 数组m*n 转置为 [n*m]。 #include<stdio.h> void change(int a[3][4],int b[4][3]){ int i,j ; for (i=0;i<3;i++) for (j=0;j<4;j++) b[j][i]=a[i][j]; } void change2(int *a,int *t,int m, int n){ int i,j; for (j=0;j<n;j++) for (i=0;i<m;i++) t[j*m+i]=a[i*n+j]; }
int main() { int a[3][4]={11,12,13,14,21,22,23,24,31,32,33,44 },b[4][3]; int x[3][4]={41,42,43,44,51,52,53,54,61,62,63,64 },y[4][3]; int i,j; printf("input a[3][4] data:\n"); for (i=0;i<3;i++) for (j=0;j<4;j++) scanf("%d",&a[i][j]); printf("before\n"); for (i=0;i<3;i++) { for (j=0;j<4;j++)printf("%d ",a[i][j]); printf("\n"); } change(a,b); printf("after\n"); for (i=0;i<4;i++) { for (j=0;j<3;j++)printf("%d ",b[i][j]); printf("\n"); } printf("\nbefore\n"); for (i=0;i<3;i++) { for (j=0;j<4;j++)printf("%d ",x[i][j]); printf("\n"); } change2(&x[0][0],&y[0][0],3,4); for (i=0;i<4;i++) { for (j=0;j<3;j++)printf("%d ",y[i][j]); printf("\n"); }