首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

小弟我提一个有关问题(VISUAL BASIC 程序设计简明教程6.0)变量内存

2012-01-19 
我提一个问题(VISUAL BASIC 程序设计简明教程6.0)变量内存今天发现这本书一直在误导我!p100多维数组在内存

我提一个问题(VISUAL BASIC 程序设计简明教程6.0)变量内存
今天发现这本书一直在误导我!   p100
    多维数组在内存中的存储排列!

    int   a[3][4];
    Dim   a(2,3)   as   integer      
    不敢毒想,贴出来大家分享,同时求解决方法!
    我们在C   里面都会用到指针,可以知道*(a[1]+i)   表示a[1][0],a[1][1],a[1][2]
    a[1][3]   可见内存中是按行排列的!
    在VB中我们不能使用指针,可是我们有一个操作内存的API函数,copymemory
    我要拷贝a(1,0),a(1,1),a(1,2),a(1,3)
    dim   intTemp(3)   as   integer
    call   copymemory(intTemp(0),a(1,0),4*2)
    按照教材上面说的,我能得到正确的结果,但是你猜得到什么了?
   
intTemp(0)   =   a(1,0)
intTemp(1)   =   a(2,0)
intTemp(2)   =   a(3,0)
intTemp(3)   =   a(0,1)
按列存储了!书再一次欺骗了我,请大家要注意哦!实践才是真理,邓小平说的没有错,呵呵
同时为了得到正确的数值,我到现在也不知道怎么做,我想是不是和堆,栈有关系呢,其实也没有关系,在VB中就是按列存储的!等高人来帮忙



[解决办法]
兩個紅褲衩,還要多高的人才算高人!



[解决办法]
呵呵,书啊!
我学VB的时候看的那本书倒是明确说明了VB数组是按列存储的
[解决办法]
还是和编译器有关的;
实践出真知啊
[解决办法]
Private Declare Sub CopyMemory Lib "kernel32 " Alias "RtlMoveMemory " (Destination As Any, Source As Any, ByVal Length As Long)

Dim intOldData(2, 9) As Integer
Dim intNewdata(9) As Integer
Private Sub Command1_Click(Index As Integer)
Dim i As Integer
Select Case Index
Case 0
Call CopyMemory(intNewdata(0), intOldData(0, 0), 20)
'//Check data
For i = 0 To 9
Debug.Print intNewdata(i)
Next i
Case 1
End Select
End Sub

Private Sub Form_Load()
Dim intIi As Integer
For intIi = 0 To 9
intOldData(0, intIi) = CInt(Rnd * 2000)
intOldData(1, intIi) = CInt(Rnd * 2000)
intOldData(2, intIi) = CInt(Rnd * 2000)
Debug.Print intOldData(0, intIi), intOldData(1, intIi), intOldData(2, intIi)
Next
Debug.Print "______________________________________ "
End Sub

还真是
[解决办法]
行列总是很晕人。。。C里面也是

热点排行