zoukankan      html  css  js  c++  java
  • [转]如何动态增长一个数组的大小

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


     

  • 相关阅读:
    关于自适应的矩形css布局
    关于在天机项目中遇到的常用git 命令
    关于es6中对象的扩展
    vue的钩子函数
    关于Javascript的forEach 和 map
    关于router-link的传参以及参数的传递
    关于vuex的项目中数据流动方式
    vue中关于prop
    提交Sublime Text 插件到Package Control
    写lua时需要注意的地方
  • 原文地址:https://www.cnblogs.com/wildfish/p/381820.html
Copyright © 2011-2022 走看看