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


     

  • 相关阅读:
    Fetch的使用
    if判断中的true和false
    分布式、微服务和集群的初步了解
    关于视频的知识点
    ajax请求
    jq的遍历关系元素方法集合
    docker安装Mysql
    设计模式系列之七大原则之——开闭原则
    设计模式系列之七大原则之——里式替换原则
    设计模式系列之七大原则之——依赖倒转原则
  • 原文地址:https://www.cnblogs.com/wildfish/p/381820.html
Copyright © 2011-2022 走看看