基本上我正在尝试使用 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 的地址)?