注册 登录
编程论坛 C++教室

数组如何交换

z00o00 发布于 2012-07-27 08:58, 572 次点击
如交换a[i][5]和a[j][5]
如将下面的矩阵1,2行进行交换
1 2 3 4 5
6 7 8 9 0
不要告诉我说用循环,谢谢了
怎么用指针
5 回复
#2
peach54602012-07-27 09:56
获取一二行的行指针,然后交换值
#3
stophin2012-07-27 11:47
我认为不使用循环移动数值以达到交换的目的,而只是交换地址,这样是不可能的。
因为数组在内存中是顺序存储的,使用时既可以用a[i][j],i++,j++配合,也可以用
*(*(a+i)+j),i++,j++配合使用,++代表的就是内存地址按int类型长度增加,这跟链表不同,
链表在内存中存储不是顺序的,但有变量指出下一个节点的地址。交换链表的顺序实际就是交换链
表下一个节点地址。但数组不同,数组在内存中顺序存储,如果交换一二行的行指针(具体怎么
做我也不会),那么内存中存储的数据并没有变动(我们暂且称之为原来的数据),但数组首地址
a变为指向原来的数据第二行,如果按++来访问数组,那么极有可能的情况是,交换后的原来的数
据第一行不会出现,因为按首地址来进行++,则从原来的数据第二行开始遍历,到行尾时,并没有任
何变量指出下一个数据的地址是原来数据的第一行,而是直接按++来到原来数据的第三行,最后,
到数组末尾时还会发生越界。int型数组没有strcpy之类的函数调用,所以除非使用循环移动,没有别的办法。
总之一句话,循环是必须要有的。
#4
pangding2012-07-27 13:30
如果必须要经常这么换行的话,改数据结构。链表之类的结构就是专门方便交换的。
#5
peach54602012-07-27 13:34
哦,忘了,数组是顺序的,我以为是vector
#6
z00o002012-07-27 15:36
boost.swap()
1