供参考:
//采用指向二维数组的行指针,实现一个n*n的整形矩阵转置。要求:不另外开辟新的数组。
#include<stdio.h>
#define N 20
int main()
{
int n, a[N][N], i, j, (* p)[N], t;
while (scanf("%d", &n) != EOF)
{
printf("请输入一个%d*%d的矩阵:\n", n, n);
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
scanf("%d", &a[i][j]);
p = &a[0];
for (i = 0; i < n; i++){//转置
for (j = 0; j < n; j++) {
if (i != j && j > i) {
t = *(p[i] + j);
*(p[i] + j) = *(p[j] + i);
*(p[j] + i) = t;
}
}
}
printf("%d*%d矩阵转置为:\n", n, n);
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
printf("%d ", *(p[i] + j));
}
printf("\n");
}
}
}