我的书上的一段代码运行到*号那行时出错提示:"Project Project1.exe raised exception clase EinoutError with message 'I/O error 105'.Process stopped.Use Step or Run to continue."procedure changevalue(x:integer);
var
intptr:^integer;
begin
intptr:=@x;
writeln(intptr^);  {*就是这行出错*}
intptr^:=20;
end;procedure TForm1.Button1Click(Sender: TObject);
var
param:integer;
begin
param:=10;
changevalue(param);
writeln(param);
end;为什么会出错?怎样改正?

解决方案 »

  1.   

    不关指针的事,是输入输出错误!你自己去看看WriteLn的帮助就知道了。
      

  2.   

    Writeln是写文件操作. 你前面没有打开文件, 所以会出错
    改为showmessage试试:
    procedure changevalue(x:integer);
    var
    intptr:^integer;
    begin
    intptr:=@x;
    //writeln(intptr^);  {*就是?行出?*}
    showmessage(inttostr(intptr^));
    intptr^:=20;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
    param:integer;
    begin
    param:=10;
    changevalue(param);
    showmessage(inttostr(param));
    //writeln(param);end;
      

  3.   

    我还想请问一下:为什么 
    intptr^:=20 没有改变param的值?是不是x和param之间是形参传递,两个变量之间的地址不同?
      

  4.   

    对,两个变量的地址不同,如果要传地址,采用下面方式:procedure changevalue(var x:integer);