两种方法使用指针实现矩阵转置。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#define N 3
#define M 3
#define P 3
void func1(int *x,int n)
{
int i, j, t = 0;
for (i = 0; i < n; i++)
{
for (j = 0; j < i; j++)
{
t = *(x + i * n + j);
*(x + i * n + j) = *(x + j * n + i);
*(x + j * n + i) = t;
}
}
}
void func2(int(*p)[N], int n)
{
int t;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < i; j++)
{
t = *(*(p + i) + j);
*(*(p + i) + j) = *(*(p + j) + i);
*(*(p + j) + i) = t;
}
}
}
int main()
{
int i, j, a[N][M], b[M][P];
//输入矩阵
for (i = 0; i < N; i++)
{
for (j = 0; j < M; j++)
scanf("%d", &a[i][j]);
}
//矩阵转置
func1(&a[0][0], N);
//func2(a, N);
//输出矩阵
for (i = 0; i < M; i++)
{
for (j = 0; j < N; j++)
printf("%d ", a[i][j]);
printf("\n");
}
return 0;
}