as / 400 RPG指针&地址

时间:2014-06-20 12:48:07

标签: pointers ibm-midrange rpgle

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

示例:

    variable = 'NewVariable' 

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

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

address of value vs address of variable

3 个答案:

答案 0 :(得分:6)

没有

如果您需要两个间接级别,请使用C或C ++。如果将C ++函数包装在服务程序中,则很容易将C / C ++函数与RPG集成。

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

答案 1 :(得分:2)

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

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

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

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

显示器

您好

再见

答案 2 :(得分:1)

当你说variable = 'NewVariable'时,这就提出了一个问题:你是在考虑使用JVM还是.NET语言,还是动态解释语言。您无法在运行时创建新变量。*

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

但是假设该字面值的位置有一个标签。您可以使用

有效地完成此任务
     d someVal         s             10a   inz( 'some value' )

       myPtr = %addr(someVal);

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