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


     

  • 相关阅读:
    面试题:给定一个长度为N的数组,其中每个元素的取值范围都是1到N。判断数组中是否有重复的数字
    位运算技巧3
    Android消息循环分析
    ubuntu安装软件的方式
    fragment Trying to instantiate a class com.example.testhuanxindemo.MyFragment that is not a Fragmen
    LAN路由
    php 简易验证码(GD库)
    飘逸的python
    它们,不能是虚函数!!!
    HTML5调用摄像头实现拍照功能(兼容各大主流浏览器)
  • 原文地址:https://www.cnblogs.com/wildfish/p/381820.html
Copyright © 2011-2022 走看看