【发布时间】:2014-04-13 01:17:55
【问题描述】:
基本上我正在尝试使用 gnu-prolog 模拟 C 指针取消引用。
代码如下:
序言
:-foreign(fun(+integer,-integer)).
% p = &b;
testfun(Var, Val) :- fun(Val, Var).
main :-
A is 1,
testfun(A, P),
write(P),
C:
#include <gprolog.h>
#include <string.h>
PlBool fun(int ptr, int* res){
*res = &ptr; // this is wrong
if(res==NULL){
return PL_FALSE;
}else{
return PL_TRUE;
}
}
所以基本上是错的,因为ptr只是栈上的一个临时变量,调用fun后它的内存会被释放。
所以我的问题是,是否可以在gnu prolog中获取变量的内存地址(例如,在这种情况下,它是A的地址,而不是ptr的地址)?
【问题讨论】:
-
我认为如果它严格来说是一个输入参数,它是按值传递的,你不能从函数中获取它的指针。
-
@lurker 但是我们可以通过其他方式获取“A”的内存地址吗?
-
为什么要
A的地址?我不认为 Prolog 可以访问其内部地址,尤其是通过 C 函数调用。即使在你有一个像int *res这样的输出参数的情况下,GNU 指南说,...存储在这个位置的整数与 Arg 是统一的。 所以它似乎不是指向 Prolog 内部维护的变量的直接指针。 -
@lurker 嗯....基本上我想在C中使用A模拟变量,我必须处理指针问题..
-
比如我有P和A,想用P来表示C语言中的指针,所以必须想办法让P存储A的内存地址。跨度>
标签: prolog gnu-prolog