请问下面这个程序的输出结果是什么?
我想应该是10 20 可是执行后却是10 10
在A处不是已经将param的值改为20了吗,为什么在B处仍然输出的是10?
顺便问一下processfile和inc这2过程是干什么的,怎样用,为什么我在delphi的标准函数中没有找到它?
program point(input,output);
var param:integer;
procedure changevalue(x:integer);
var
intptr:^integer;
begin
intptr:=@x;
writeln(intptr^);
intptr^:=20; //A
end;
begin
param:=10;
changevalue(param);
writeln(param); //B
end.
我想应该是10 20 可是执行后却是10 10
在A处不是已经将param的值改为20了吗,为什么在B处仍然输出的是10?
顺便问一下processfile和inc这2过程是干什么的,怎样用,为什么我在delphi的标准函数中没有找到它?
program point(input,output);
var param:integer;
procedure changevalue(x:integer);
var
intptr:^integer;
begin
intptr:=@x;
writeln(intptr^);
intptr^:=20; //A
end;
begin
param:=10;
changevalue(param);
writeln(param); //B
end.
var param:integer;
procedure changevalue(x:integer);
var
intptr:^integer;
begin
intptr:=@x;
writeln(intptr^);
intptr^:=20; // 这儿改变的只是为子程序分配的堆栈中的参数的值
end;
begin
param:=10;
changevalue(param);
writeln(param); //B
end.
用个变参就可,是直接传地址过来的
procedure changevalue(var x:integer);
begin
writeln(x);
x := 20; // 这儿改变的只是为子程序分配的堆栈中的参数的值
end;
var param:integer;
procedure changevalue(x:integer);
var
intptr:^integer;
begin
intptr:=@x;
writeln(intptr^);
intptr^:=20; //重新为程序分配的堆栈中的参数的值
end;
begin
param:=10;
changevalue(param);
writeln(param); //内存地址不可以再存到过程序的外面调,因为你只是声明一个常量参数
end.我实现你的问题,可有两种方法,一是存递数量参数,另一个是传递指针,你的程序可以改成这样:
program point(input,output);
var param:integer;
procedure changevalue(x:^integer);
var
intptr:^integer;
begin
intptr:=x;
writeln(intptr^);
intptr^:=20; //A
end;
begin
param:=10;
changevalue(@param);
writeln(param); //B
end.
procedure changevalue(x:integer);用这两种不同的形式你执行一下,看看有什么收获 :)