题目的要求是让我们把一个3*3的矩阵转置,也就是将原来的行变成列,如果我们不用指针的话题目可能还更容易理解,我们先来想一想用指针做的思路,最简单的应该就是定义两个数组a[],b[],将一个数组a[]的列传给另一个数组b[]的行上面,然后再去输出数组b[],这个转置是不是就完成了呢
下面是实现该操作的函数:
void Trans(int *a,int *b)
{
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
*((b+j*3)+i) = *((a+i*3)+j);
}
}
}
下面是完整题目的解:
#include<stdio.h>
void Trans(int *a,int *b);
int main()
{
int a[3][3];
int b[3][3];
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",&a[i][j]);
}
}
int *p1=&a[0][0];
int *p2=&b[0][0];
Trans(p1,p2);
printf("转置后\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("%d ",b[i][j]);
}
printf("\n");
}
return 0;
}
void Trans(int *a,int *b)
{
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
*((b+j*3)+i) = *((a+i*3)+j);
}
}
}
我们传入函数的是两个数组的首元素地址,假设p是a的首元素的地址,那么当p移动的时候就是在数组中一个一个移动,p+1就是第二个元素的地址,p+2就是第三个元素的地址……
希望能对你有用!