【问题标题】:as/400 RPG pointers & addressesas/400 RPG 指针和地址
【发布时间】:2014-06-20 12:48:06
【问题描述】:

在 AS/400 上,在 RPG 中有没有办法将指针地址设置为变量的值而不是变量本身的地址?

示例:

    variable = 'NewVariable' 

其中的值将是程序内部使用的实际变量

pointer = %addr('NewVariable')pointer = %addr(variable)

address of valueaddress of variable

【问题讨论】:

  • 您询问了“变量的值”,但随后您将示例显示为文字常量的值。你能举一个实际的例子吗?引用文字常量的“地址”似乎没有多大意义。

标签: pointers ibm-midrange rpgle


【解决方案1】:

没有。

如果您需要两级间接,请使用 C 或 C++。如果将 C++ 函数封装在服务程序中,那么将 C/C++ 函数与 RPG 集成非常容易。

你想做什么,你需要一个指向变量指针的指针?也许有一种不同的方法可以解决实际的业务问题。

【讨论】:

  • 我赞赏您尝试以一种有意义的方式来解释这个问题,这也许是唯一合理的方式。所写的问题没有意义(正如评论者和另一位回答者所表达的那样)。
【解决方案2】:

这个问题没有多大意义。由于 RPG 是一种编译语言,因此变量只存在于源代码中。地址仅在程序执行期间存在。

变量只是(在源代码中)给定的名称(在源代码中)给(将是)在运行时给定地址的一定数量的字节。

 d var1                          10a
 d var2                          10a   based(myPtr)
 d myPtr                           *  

    myPtr = %addr(var1);
    var1 = 'Hi';
    dsply var1;
    var2 = 'Bye';
    dsply var1;

展示

再见

【讨论】:

    【解决方案3】:

    当您说variable = 'NewVariable' 时,就会产生一个问题,您是在思考 JVM 或 .NET 语言,还是动态解释语言。您不能在运行时创建新变量。*

    当您说希望能够说 %addr('some value') 而不是 %addr( someVariable ) 时,我不确定您要完成什么。在我能想到的任何语言中,一个未命名的文字常量都不能直接寻址。

    但是假设在该字面值的位置上有一个标签。您可以通过

         d someVal         s             10a   inz( 'some value' )
    
           myPtr = %addr(someVal);
    

    您可以将someVal 视为助记常数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-06
      • 1970-01-01
      • 1970-01-01
      • 2020-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多