今天我刚刚学习了指针,对它掌握的并不是很了解。现在我们来写一个通过指针来实现矩阵转置的程序。原先在学习数组的时候,我曾经练习过通过数组来实现矩阵转置。
矩阵转置的核心是如何交换a[i][j]和a[j][i]的值。下面我先附上我原先写的代码,大家可以看一下。
#include<stdio.h>
void transpos(int arr[4][4])
{
int i;
int j;
int temp;
for(i = 0; i < 4; i++)
{
for(j = i+1; j < 4; j++ )
{
temp = arr[i][j];
arr[i][j] = arr[j][i];
arr[j][i] = temp;
}
}
for(i = 0; i < 4; i++)
{
for(j = 0; j < 4; j++)
{
if(j%4 == 0)
printf("\n");
printf("%4d",arr[i][j]);
}
}
printf("\n");
}
int main()
{
int arr[4][4];
int i;
int j;
printf("please input the arry!\n");
for(i = 0; i < 4; i++)
{
for(j = 0; j < 4; j++)
{
scanf("%d",&arr[i][j]);
}
}
for(i = 0; i < 4; i++)
for(j = 0; j < 4; j++)
{
if(j%4 == 0)
printf("\n");
printf("%4d",arr[i][j]);
}
printf("\n");
transpos(arr);
}
这是我原先写的代码,现在我再附上我用指针实现数组转置的代码
#include <stdio.h>
void move(int *p)
{
int i;
int j;
int t;
for (i = 0; i < 3; i++)
for (j = i; j < 3; j++)
{
t=*(p + 3*i + j);
*(p + 3*i+j) = *(p + 3*j + i);
*(p + 3*j + i) = t;
}
}
int main()
{
int a[3][3];
int *p;
int i;
printf("please input the matrix!\n");
for(i = 0; i < 3; i++)
{
scanf("%d %d %d",&a[i][0],&a[i][1],&a[i][2]);
}
for(i = 0; i < 3; i++)
{
printf("%d %d %d\n",a[i][0],a[i][1],a[i][2]);
}
p=&a[0][0];
move(p);
printf("Now,matrix:\n");
for(i = 0; i < 3; i++)
{
printf("%d %d %d\n",a[i][0],a[i][1],a[i][2]);
}
return 0;
}
两个程序很相似,下面我附上运行图