Pointers as/400 RPG指针和;地址

Pointers as/400 RPG指针和;地址,pointers,ibm-midrange,rpgle,Pointers,Ibm Midrange,Rpgle,在AS/400上,在RPG中,有没有办法将指针地址设置为变量的值,而不是变量本身的地址 例如: variable = 'NewVariable' 其中,该值将是程序内部使用的实际变量 pointer=%addr('NewVariable')vspointer=%addr(variable) 值的地址vs变量的地址否 如果需要两个间接级别,使用C或C++。如果在服务程序中封装C++函数,将C/C++函数与RPG集成起来是非常容易的。 你想做什么,你需要一个指向变量的指针?也许有一种不同

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

例如:

    variable = 'NewVariable' 
其中,该值将是程序内部使用的实际变量

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

值的地址
vs
变量的地址

如果需要两个间接级别,使用C或C++。如果在服务程序中封装C++函数,将C/C++函数与RPG集成起来是非常容易的。


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

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

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

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

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


再见,

当你说
variable='NewVariable'
时,这就提出了一个问题:你可能是在思考JVM或.NET语言,还是动态解释性语言。不能在运行时创建新变量*

当你说希望能够说
%addr('somevalue')
而不是
%addr(someVariable)
时,我不确定你想实现什么。在我能想到的任何语言中,未命名的文字常量都不能直接寻址

但是假设在该文本值的位置上有一个标签。您可以使用

     d someVal         s             10a   inz( 'some value' )

       myPtr = %addr(someVal);

您可以将
someVal
视为助记符常量。

您询问了“变量的值”,但随后您将示例显示为文字常量的值。你能举个实际的例子吗?引用字面常量的“地址”似乎没有多大意义。我赞赏你试图以有意义的方式解释这个问题,也许这是唯一可能的方式。书面问题毫无意义(正如一位评论者和另一位回答者所表达的)。