| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 9345 人关注过本帖
标题:将一个3*3矩阵转置
只看楼主 加入收藏
forice
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2005-8-25
收藏
 问题点数:0 回复次数:10 
将一个3*3矩阵转置
main()
{
int a[3][3]={1,2,3,4,5,6,7,8,9};
int *p,i;
p=&a[0][0];
move(p);
for(i=0;i<3;i++)
printf("%d %d %d\n",a[i][0],a[i][1],a[i][2]);
}
move(int *pointer)
{
int i,j,t;
for(i=0;i<3;i++)
for(j=i;j<3;j++)
{
t=*(pointer+3*i+j); //我这里看不明白。当开始第二个循环体时当j=1时,岂不是交换*(pointer+1)与*(pointer+3)
*(pointer+3*i+j)=*(pointer+3*j+i); //那这个*(pointer+3)是哪个元素?怎么用种方式表示
*(pointer+3*j+i)=t; //根据指向二维数组的指针*(pointer+i)+j表示的是指向第i行第j列的地址,那上面的*(pointer+3)岂
} //不是指向第三行第零列的地址?就是这里很模糊,请指教。THX~~
}
搜索更多相关主题的帖子: 矩阵 
2006-09-19 21:18
C之Itachi
Rank: 1
等 级:新手上路
帖 子:111
专家分:0
注 册:2006-7-16
收藏
得分:0 

根据指向二维数组的指针*(pointer+i)+j表示的是指向第i行第j列的地址,那上面的*(pointer+3)岂

int a[3][3],(*p)[4],i,j;(这时的 *(p+i)+j为i行 j列)



int a[3][3],*p;(这时的*(p+3*i+j)就是LZ这个程序里的.)
的区别..

个人认为是这样.我刚好学到2维数组与指针...LZ努力
共同进步呀..
呵呵



2006-09-19 21:57
forice
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2005-8-25
收藏
得分:0 
以下是引用C之Itachi在2006-9-19 21:57:02的发言:

根据指向二维数组的指针*(pointer+i)+j表示的是指向第i行第j列的地址,那上面的*(pointer+3)岂

int a[3][3],(*p)[4],i,j;(这时的 *(p+i)+j为i行 j列)



int a[3][3],*p;(这时的*(p+3*i+j)就是LZ这个程序里的.)
的区别..

个人认为是这样.我刚好学到2维数组与指针...LZ努力
共同进步呀..
呵呵


我看不懂什么意思哦

2006-09-19 22:13
Sally_SJL
Rank: 1
等 级:新手上路
威 望:2
帖 子:452
专家分:1
注 册:2006-7-14
收藏
得分:0 
以下是引用forice在2006-9-19 21:18:56的发言:
main()
{
int a[3][3]={1,2,3,4,5,6,7,8,9};
int *p,i;
p=&a[0][0];
move(p);
for(i=0;i<3;i++)
printf("%d %d %d\n",a[i][0],a[i][1],a[i][2]);
}
move(int *pointer)
{
int i,j,t;
for(i=0;i<3;i++)
for(j=i;j<3;j++)
{
t=*(pointer+3*i+j); //我这里看不明白。当开始第二个循环体时当j=1时,岂不是交换*(pointer+1)与*(pointer+3)
*(pointer+3*i+j)=*(pointer+3*j+i); //那这个*(pointer+3)是哪个元素?怎么用种方式表示
*(pointer+3*j+i)=t; //根据指向二维数组的指针*(pointer+i)+j表示的是指向第i行第j列的地址,那上面的*(pointer+3)岂
} //不是指向第三行第零列的地址?就是这里很模糊,请指教。THX~~
}

*(pointer+3)应该是第二行的第一列吧,就是4
其实是2和4互换,3和7互换。。。。,应该是这样吧

我也是初学者,大家一起进步!


人生没有彩排,每天都是现场直播~~~
2006-09-19 22:23
forice
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2005-8-25
收藏
得分:0 
以下是引用Sally_SJL在2006-9-19 22:23:14的发言:

*(pointer+3)应该是第二行的第一列吧,就是4
其实是2和4互换,3和7互换。。。。,应该是这样吧

我也是初学者,大家一起进步!

嗯,我知道2,4互换。

但是我不明白*(pointer+3)为什么是指向第二行的第一列。
第二行第一列我们不是可以用*(pointer+2)+1表示吗

2006-09-19 22:28
Sally_SJL
Rank: 1
等 级:新手上路
威 望:2
帖 子:452
专家分:1
注 册:2006-7-14
收藏
得分:0 
以下是引用forice在2006-9-19 22:28:10的发言:

嗯,我知道2,4互换。

但是我不明白*(pointer+3)为什么是指向第二行的第一列。
第二行第一列我们不是可以用*(pointer+2)+1表示吗

*pointer 第一行第一列,*(pointer+1)第一行第二列,*(pointer+2)第一行第三列
所以*(pointer+3)就是第二行第一列了


人生没有彩排,每天都是现场直播~~~
2006-09-19 22:31
北海舰队
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-9-19
收藏
得分:0 
楼上说的不对

教官说过:祖国不会忘记你们. 为了祖国即便死在明天的战场上也无怨无悔. -- 北海 fly
2006-09-19 22:33
jxnuwy04
Rank: 2
等 级:新手上路
威 望:4
帖 子:768
专家分:0
注 册:2006-9-15
收藏
得分:0 
用数组写的,看看;
void move(int a[][3])
{
int i,j,temp;
for(i=0;i<3;i++)
for(j=0;j<=i/2;j++)
{ temp=a[i][j];
a[i][j]=a[j][i];
a[j][i]=temp;
}
}

------------------不为别的,就为你,我的理想!-----------------
2006-09-19 22:33
unicorn
Rank: 4
等 级:贵宾
威 望:14
帖 子:1066
专家分:0
注 册:2005-10-25
收藏
得分:0 
pointer 被赋的是数组a的首地址 即a[0][0]
既然是地址 那么pointer+1 意思就是指向下一个地址 即&a[1][0],所以(pointer+1)+1等价于 &a[1][1]
... 因为数组在内存中是连续的 所以1 2 3 4 5 6 7 8 9 所存储的位置对应pointer来讲就是pointer,poniter+2,...,pointer+8

unicorn-h.spaces. ◇◆ sava-scratch.spaces.  noh enol ! pue pu!w hw u! shemle aq ll!m noh 
2006-09-19 22:36
C之Itachi
Rank: 1
等 级:新手上路
帖 子:111
专家分:0
注 册:2006-7-16
收藏
得分:0 
[QUOTE]

a[3][3],*(pointer+i)+j这个如果表示是第i行第j列,那么指针的定义应该就是指向包含3个元素的一维数组.也就是
int (*p)[3]; 然后把p=a;

[/QUOTE]

2006-09-19 22:40
快速回复:将一个3*3矩阵转置
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025170 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved