- 论坛徽章:
- 0
|
[原文地址: 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
复制代码 |
|