我想使用一个简单的函数(sqr表示数字)
function stepenadr(adresss:pointer):real;
begin
stepenadr:=adresss^*adresss^;
end;
使用实变量的地址
adress:=@x1;
像这样:
writeln(x1,'^',2,'=',stepenadr(adress));
然而它给了我错误,比如这个操作无法完成,或者它无法指定指针。地址是一个
adress :pointer;
也不像这样:
function stepenadr(adresss:pointer):real;
begin
stepenadr:=adresss*adresss;
end;
答案 0 :(得分:3)
无类型指针指向一个匿名空记录,可以通过运行以下程序看到:
var p :pointer;
begin
writeln (sizeof(p^)); // will print 0
end.
无类型指针具有接受任何信息的优点,但是在指向无类型函数的类型指针的过程中,信息(类型)丢失了它所指向的内容。你发现了。
解决方案是保持键入,或者在极少数情况下进行类型转换:
type preal=^real;
function stepenadr(adresss:pointer):real;
begin
stepenadr:=preal(adresss)^*preal(adresss)^;
end;
向编译器解释如何解释指针(作为preal),然后再次定义指针指向的类型。
如果地址最初没有指向真实的话,这可能会造成灾难性的错误,因为编译器可能会将随机存储器解释为真实的。
答案 1 :(得分:0)
没关系,通过这样做得到它:
function stepenadr(adress:^real):real;
begin
stepenadr:=adress^*adress^;
end;
adress:=@x1;
writeln(x1,'^',2,'=',stepenadr(adress));