交错阵列 PL1 (PL/I)

  • 本文关键字:PL 阵列 PL1 pl-i
  • 更新时间 :
  • 英文 :


我需要PL/I中的交错动态数组,但我不知道如何实现它。需要类似的东西:

dcl v dim(*,*) fixed bin(31) ctl;
allocate v dim(5,*);             
allocate v(1) dim(10);           
allocate v(2) dim(100);    

我该怎么做?

数组

声明中的星号仅在子例程中使用,并指示数组维度将取自参数中传递的数组的元数据。

要控制通过 allocate 语句分配的数组的大小,请使用变量:

dcl v dim(d1, d2) ctl, 
   d1 fixed bin(31), 
   d2 fixed bin(31); 
 d1 = 5; 
 d2 = 15; 
 alloc v;

这会给你v(5, 15).

您可以对下限和上限使用变量:

dcl w dim(l1:u1, l2:u2) ctl, 
   l1 fixed bin(31), 
   l2 fixed bin(31),
   u1 fixed bin(31), 
   u2 fixed bin(31); 
 get data(l1, u1, l2, u2);
 alloc w;

当 SYSIN 输入为 l1=-4; u1=6; l2=15; u2=144; 时,w 被分配为w(-4:6, 15:144)

有关 IBM PL/I,请参阅当前 PDF 文档的 V5.1 语言参考手册部分受控存储和属性或第 260 页(实际第 296 页(。

我以piet.t告诉的方式解决了这个问题。创建了指针数组并为每个指针分配数组。恕我直言,这看起来不是很方便。

    mainp:procedure options(main);                                 
    dcl n fixed bin(31);                                           
    dcl pp ptr;                                                    
    dcl 1 pointers based(pp),                                      
          2 length fixed bin(31),                                  
          2 at dim(n refer (length)) ptr;                          
    dcl m fixed bin(31);                                           
    dcl 1 values based,                                            
          2 length fixed bin(31),                                  
          2 at dim(m refer (length)) fixed bin(31);                
    n=2;                                                           
    allocate pointers;                                             
    m=2;                                                           
    allocate values set(pointers.at(1));                           
    m=4;                                                           
    allocate values set(pointers.at(2));                           
    pointers.at(1)->values.at(1)=1;                                
    pointers.at(1)->values.at(2)=2;                                
    pointers.at(2)->values.at(1)=10;                               
    pointers.at(2)->values.at(2)=20;                               
    pointers.at(2)->values.at(3)=30;                               
    pointers.at(2)->values.at(4)=40;                               
    put skip list("Line 1 length: ",pointers.at(1)->values.length);
    put skip list("Line 2 lenght: ",pointers.at(2)->values.length);
    put skip list('');                                             
    put skip list(pointers.at(1)->values.at(1),                    
                  pointers.at(1)->values.at(1));                   
    put skip list(pointers.at(2)->values.at(1),                    
                  pointers.at(2)->values.at(2),                    
                  pointers.at(2)->values.at(3),
              pointers.at(2)->values.at(4));                               
end; 

相关内容

  • 没有找到相关文章

最新更新