写一个函数,使给定的一个3*3的二维整型数组转置

xuxinang 2014-11-03 07:33:36
#include <stdio.h>
#define N 3

void exchange(int* p)
{
int temp,i,j;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
temp=*(*(p+i)+j);
*(*(p+i)+j)=*(*(p+j)+i);
*(*(p+j)+i)=temp;
}
}
}

int main()
{
int i,a[N][N];
int *p=&a[0][0];
void exchange(int*);
printf("input matrix:\n");
for(i=0;i<N;i++)
scanf("%d%d%d",&a[i][0],&a[i][1],&a[i][2]);
exchange(p);
for(i=0;i<N;i++)
printf("%d\t%d\t%d\n",a[i][0],a[i][1],a[i][2]);
}

...全文
3735 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Uron 2014-11-04
  • 打赏
  • 举报
回复
直接用数组做参数,建议写成数组的引用,不然编译器当成数组指针,容易越界。
兜兜很帅 2014-11-04
  • 打赏
  • 举报
回复
二维数组的转置,其实就是矩阵的转置,再说白一点就是二维数组的转置 就是为了实现矩阵的转置 个人觉得既然这个转置函数 void exchange(int* p) 这么写,其传入的 p必定是指向 一个二维数组的内存首地址, 假设 矩阵为 :1 2 3 4 5 6 7 8 9 那么p的内存数据顺序就是 123456789 我们假设假设我们的矩阵为N*N 行为row 列为col ,那么 对应的值 可以表达为 p[(N*row)+col] ,该种方式是通过计算内存的位移来访问二维数据,实际的存数顺序 看起来跟普通的数组一样。 还有提示一点,二维数组的转置,可以遍历左下方的替换右上方的,或者遍历右上方的替换左下方的。左下方的时的都是 row > col 右上方的都是col>row ,不然全部遍历以后替换两遍,跟没替换一样!
勤奋的小游侠 2014-11-03
  • 打赏
  • 举报
回复
#define N 3 void exchange(int p[N][N]) { int temp,i,j; for(i=0;i<N;i++) { for(j=0;j<N;j++) { temp=*(*(p+i)+j); *(*(p+i)+j)=*(*(p+j)+i); *(*(p+j)+i)=temp; } } } int main() { int i,a[N][N]; printf("input matrix:\n"); for(i=0;i<N;i++) scanf("%d%d%d",&a[i][0],&a[i][1],&a[i][2]); exchange(a); for(i=0;i<N;i++) printf("%d\t%d\t%d\n",a[i][0],a[i][1],a[i][2]); } 参数直接用二维数组就好了,转成指针是多此一举。
勤奋的执着 2014-11-03
  • 打赏
  • 举报
回复
temp=*(*(p+i)+j); *(*(p+i)+j)=*(*(p+j)+i); *(*(p+j)+i)=temp; 用的有问题,下班了,有空再看看

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧