如何将一个3*4的二维数组转置成4*3的数组啊?
Option Base 1
Dim c(3, 4) As Integer
Private Sub Form_click()
For a = 1 To 3
For b = 1 To 4
c(a, b) = Int((6 * Rnd) + 1)
Print c(a, b); Spc(3);
Next
Print
Next
End Sub
我已经生成了一个随即的二维数组,如何将他转置成一个4*3的数组?
问题点数:0、回复次数:7Top
1 楼tmran(Rocky 爱瘦鱼)回复于 2004-12-04 21:34:25 得分 0
For a = 1 To 3
For b = 1 To 4
x(b,a)=c(a, b)
Print x(b,a)
Next
Print
Next
Top
2 楼wwqna(york)回复于 2004-12-04 21:53:28 得分 0
估计copymemory可以做到,未经测试的哦!Top
3 楼edwal(无知无情)回复于 2004-12-04 22:02:51 得分 0
int a[3][4];
int b[4][3];
for(int i=0;i<3;i++)
for(int j=0;j<4;j++)
b[j][i]=a[i][j];
Top
4 楼WallesCai(女人之美,在于蠢得无怨无悔,男人之美,在于撒谎撒得白日见鬼)回复于 2004-12-04 22:44:48 得分 0
dim A(2,3) as integer '这才是3*4的数组
dim B(3,2) as integer '这才是4*3的数组,因为不指定的话,数组默认从0开始的
...
copymemory B(0,0),A(0,0),24
'解释一下:就是从数组元素A(0,0)开始向数组元素B(0,0)开始连续复制24个字节的数据
'因为INTEGER是2个字节的,所以 3*4*2=24Top
5 楼WallesCai(女人之美,在于蠢得无怨无悔,男人之美,在于撒谎撒得白日见鬼)回复于 2004-12-04 22:58:06 得分 0
API定义:
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSrc As Any, ByVal ByteLen As Long)
Top
6 楼jhtzz(执著男孩)回复于 2004-12-05 09:53:20 得分 0
我去试试,看是不是真的哈
但
int a[3][4];
int b[4][3];
for(int i=0;i<3;i++)
for(int j=0;j<4;j++)
b[j][i]=a[i][j];
和
dim A(2,3) as integer '这才是3*4的数组
dim B(3,2) as integer '这才是4*3的数组,因为不指定的话,数组默认从0开始的
...
copymemory B(0,0),A(0,0),24
有什么不同么?比如说速度,或所占内存呀这些都是区别Top
7 楼ylsn2004(碧海青天)回复于 2004-12-05 10:37:30 得分 0
利用b(j,i)=a(i,j)方法可以得到一个倒置的数组,能满足楼主的要求
利用API的copymemory方法不可以,这只能得到一个一模一样的数组,维数并不改变.Top




