Pascal 在函数中通过指针更改值
我想使用一个简单的函数(sqr表示数字) 通过使用实变量的地址Pascal 在函数中通过指针更改值,pascal,Pascal,我想使用一个简单的函数(sqr表示数字) 通过使用实变量的地址 adress:=@x1; 像这样: writeln(x1,'^',2,'=',stepenadr(adress)); 然而,它给了我一些错误,比如这个操作不能完成,或者它不能改变指针的名称。地址是a adress :pointer; 也不能像这样工作: function stepenadr(adresss:pointer):real; begin stepenadr:=adresss*adresss; end; 没关系,通
adress:=@x1;
像这样:
writeln(x1,'^',2,'=',stepenadr(adress));
然而,它给了我一些错误,比如这个操作不能完成,或者它不能改变指针的名称。地址是a
adress :pointer;
也不能像这样工作:
function stepenadr(adresss:pointer):real;
begin
stepenadr:=adresss*adresss;
end;
没关系,通过这样做,它开始工作了:
function stepenadr(adress:^real):real;
begin
stepenadr:=adress^*adress^;
end;
adress:=@x1;
writeln(x1,'^',2,'=',stepenadr(adress));
没关系,通过这样做,它开始工作了:
function stepenadr(adress:^real):real;
begin
stepenadr:=adress^*adress^;
end;
adress:=@x1;
writeln(x1,'^',2,'=',stepenadr(adress));
非类型指针指向匿名空记录,可通过运行以下程序查看该记录:
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),然后再次定义指针指向的类型
这可能会导致灾难性的错误,尽管如果地址最初不指向实数,那么编译器可能会将随机内存解释为实数。非类型指针指向匿名空记录,可通过运行以下程序查看该记录:
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),然后再次定义指针指向的类型
这可能会导致灾难性的错误,尽管如果地址最初没有指向实数,那么编译器可能会将随机内存解释为实数。嗯。。。你为什么要这么做?大学作业的一部分,上一次我用帕斯卡做了些什么,那是很久以前的事了。。。你为什么要这么做?这是大学作业的一部分,而我上一次用帕斯卡做某事是很久以前的事了