[转]如何动态增长一个数组的大小

[原文地址: http://www.think400.dk/adhoc_4.htm#eks0015]
问题:
使用VB 或者C 我能够很容易的增加数组的大小而不丢失原来的数据,在RPG里面是否也可能呢?
回答:
当然可以,但是你得基于指针建立数组。并且增长内存分配大小。具体看看操作码 ALLOC, REALLOC, 和 DEALLOC 。
下面是一个快速的例子:

 

 * 数组定义--基于指针
Darray            S             
10    DIM(20000) BASED(PTR)
Dindex            s              
7  0
 
* memory allocation data items--不知道具体怎么翻译这个,按照我的理解,是一个指针结构
 
* 用于保存数组的信息,比如数组中的序号,内存大小,数组的内容
Dptr               S               
*
Dnbr_of_elems     S              
5   0 INZ(10)
Dmem_size           S              
7   0 INZ
Dx                         S             10i 
0
 
* 分配出示内存=
 
*(元素的初始数量 * 数组的内容的大小)
C                   
EVAL      mem_size = %size(array) * nbr_of_elems
C                   ALLOC     mem_size      ptr
C                   
EVAL      x = %elem(array)

 
* 循环测试
C     
1             DO        50            index

 
* 当索引超过当前数组元素的上限时
C                   
IF        index > nbr_of_elems
 
* 通过加10的步长方式 
 
*并且乘以数组元素的大小得到一个新的内存大小
C                   
EVAL      nbr_of_elems = nbr_of_elems + 10
C                   
EVAL      mem_size = %size(array) * nbr_of_elems

 
* 重新分配内存块,并且增长大小
C                   REALLOC   mem_size      ptr
C                   ENDIF

 
* Move数据测试
C                   MOVE      
index         array(index)
 
*
C                   ENDDO

 
* 释放内存
C                   DEALLOC                 ptr
C                   
EVAL      *inlr = *on


Thanks to Mark D. Walter


 

 

posted @ 2006-04-21 23:43  深渊野鱼  阅读(881)  评论(0编辑  收藏  举报