标题:数组如何交换
只看楼主
z00o00
Rank: 2
等 级:论坛游民
帖 子:4
专家分:10
注 册:2012-7-21
结帖率:100%
已结贴  问题点数:20 回复次数:5 
数组如何交换
如交换a[i][5]和a[j][5]
如将下面的矩阵1,2行进行交换
1 2 3 4 5
6 7 8 9 0
不要告诉我说用循环,谢谢了
怎么用指针
搜索更多相关主题的帖子: 交换 如何 
2012-07-27 08:58
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
得分:3 
获取一二行的行指针,然后交换值

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2012-07-27 09:56
stophin
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:227
专家分:618
注 册:2010-3-26
得分:11 
我认为不使用循环移动数值以达到交换的目的,而只是交换地址,这样是不可能的。
因为数组在内存中是顺序存储的,使用时既可以用a[i][j],i++,j++配合,也可以用
*(*(a+i)+j),i++,j++配合使用,++代表的就是内存地址按int类型长度增加,这跟链表不同,
链表在内存中存储不是顺序的,但有变量指出下一个节点的地址。交换链表的顺序实际就是交换链
表下一个节点地址。但数组不同,数组在内存中顺序存储,如果交换一二行的行指针(具体怎么
做我也不会),那么内存中存储的数据并没有变动(我们暂且称之为原来的数据),但数组首地址
a变为指向原来的数据第二行,如果按++来访问数组,那么极有可能的情况是,交换后的原来的数
据第一行不会出现,因为按首地址来进行++,则从原来的数据第二行开始遍历,到行尾时,并没有任
何变量指出下一个数据的地址是原来数据的第一行,而是直接按++来到原来数据的第三行,最后,
到数组末尾时还会发生越界。int型数组没有strcpy之类的函数调用,所以除非使用循环移动,没有别的办法。
总之一句话,循环是必须要有的。
2012-07-27 11:47
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:3 
如果必须要经常这么换行的话,改数据结构。链表之类的结构就是专门方便交换的。
2012-07-27 13:30
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
得分:3 
哦,忘了,数组是顺序的,我以为是vector

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2012-07-27 13:34
z00o00
Rank: 2
等 级:论坛游民
帖 子:4
专家分:10
注 册:2012-7-21
得分:0 
boost.swap()
2012-07-27 15:36



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-374199-1-1.html




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

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