在AS / 400上,在RPG中有没有办法将指针地址设置为变量的值而不是变量本身的地址?
示例:
variable = 'NewVariable'
其中值是程序内部使用的实际变量
pointer = %addr('NewVariable')
vs pointer = %addr(variable)
address of value
vs address of variable
答案 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
视为助记符常量。