免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2629 | 回复: 4
打印 上一主题 下一主题

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-21 23:43 |只看该作者 |倒序浏览
[原文地址: http://www.think400.dk/adhoc_4.htm#eks0015]
问题:
使用VB 或者C 我能够很容易的增加数组的大小而不丢失原来的数据,在RPG里面是否也可能呢?
回答:
当然可以,但是你得基于指针建立数组。并且增长内存分配大小。具体看看操作码 ALLOC, REALLOC, 和 DEALLOC 。
下面是一个快速的例子:


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

  15. * 循环测试
  16. C     1             DO        50            index

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

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

  26. * Move数据测试
  27. C                   MOVE      index         array(index)
  28. *
  29. C                   ENDDO

  30. * 释放内存
  31. C                   DEALLOC                 ptr
  32. C                   EVAL      *inlr = *on

  33. Thanks to Mark D. Walter


复制代码

论坛徽章:
0
2 [报告]
发表于 2006-04-22 19:17 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2012-02-15 16:48 |只看该作者
只是改变了所分配的内存大小,数组个数还是没变~~

论坛徽章:
0
4 [报告]
发表于 2012-02-21 21:34 |只看该作者
tag

论坛徽章:
0
5 [报告]
发表于 2012-03-19 20:56 |只看该作者
本帖最后由 绿茶czm 于 2012-03-19 21:24 编辑

回复 3# treeyiki
同意

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP