题目:写一函数,将一个3*3的整型矩阵转置。
楼主第一眼看到此题 心情如下
什么是矩阵转置
说白了不就是行列换一下吗?
恕楼主无能,没能用指针方法做出来。。。?
直接放答案了
#include<stdio.h>
int main()
{void move(int *pointer);
int a[3][3],*p,i;
printf("input matrix:\n");
for(i=0;i<3;i++)
{scanf("%d%d%d",&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;
}
void move(int *pointer)
{int i,j,t;
for(i=0;i<3;i++)
{
for(j=i;j<3;j++)
{t=*(pointer+3*i+j);
*(pointer+3*i+j)=*(pointer+3*j+i);
*(pointer+3*j+i)=t;
}
}
}
a是二维数组,p和形参pointer是指向整型数据的指针变量,p指向数组0行0列元素a[0][0].在调用move函数时,将实参p的值&a[0][0]传递给形参pointer,在move函数中将a[i][j]与a[j][i]的值交换。由于a数组的大小时33,而数组元素是按行排列的,因此a[i][j]在a数组中是第(3i+j)个元素,例如a[2][1]是数组第7个元素。同理,a[i][j]的地址是(pointer+3j+i)。将(pointer+3i+j)和(pointer+3*j+i)互换即可。
运行结果
下两篇将前面两道题的答案版写一下
下一篇 指针习题7答案版