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

[原文地址: 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


 

 

你可能感兴趣的:(数组)