参数的类型? ( 积分: 30 )

  • 主题发起人 主题发起人 ff_ff
  • 开始时间 开始时间
F

ff_ff

Unregistered / Unconfirmed
GUEST, unregistred user!
function MyFun(x:integer):integer;

function MyFun(var x:integer):integer;
的区别?
 
function MyFun(x:integer):integer;

function MyFun(var x:integer):integer;
的区别?
 
procedure TForm1.Button1Click(Sender:TObject);
var
a:Integer;
begin
a := 0;
ShowMessage(IntToStr(MyFunc(a)));
ShowMessage(IntToStr(a));
end;
如果是第一个函数,上面的测试代码第二个SHowMessage显示的是0,如果是第二个,MyFun里面又对x修改过,那么SHowmessage显示的将不是0。
 
function MyFun1(x:integer):integer;
begin
result := x*x;
x := x + 100;
end;

function MyFun2(var x:integer):integer;
begin
result := x*x;
x := x + 100;
end;

procedure TForm1.Button1Click(Sender:TObject);
var
a:Integer;
begin
a := 0;
ShowMessage(IntToStr(MyFunc1(a)));//结果为0
ShowMessage(IntToStr(MyFunc2(a)));//结果为100 因为 x := x + 100
end;
 
function MyFun(x:integer):integer;
begin
result:=x;
end;
function MyFun(var x:integer):integer;
begin
result:=x;
end;
MyFun里面又对x修改过?
我经过测试,两个函数是一样的啊,到底有什么不同吗?
 
带var的是引用调用,就是地址调用,像c里的&,不带var的就是值调用。
 
function MyFun(x:integer):integer;
begin
result:=x;
x:=100;
end;
function MyFun(var x:integer):integer;
begin
result:=x;
x:=100;
end;
你再试!
 
royal1442,测试不过.
值调用,地址调用忘了,哎.太菜了.赶快补啊
 
值调用或者这样解释
不带var的参数在函数或过程体内部操作的是这个变量的“副本”(不太确切)对变量的值不会有影响,
带var的参数在函数或过程体内部操作的就是本身
带var的参数的过程用的最多的就是来代替掉function的返回值,
有的时候是不能用function的只能用procedure(var x)
 
to zqw0117 都是0
 
你不会真的写了两个MyFunc把?其中一个改名,改成MyFunc1或者MyFunc2,再试。晕。
 
zqw007,晕,俺再菜,也不动重名的.的确不行.你试试
 
这是俺的代码,都是0
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function MyFun1(x:integer):integer;
function MyFun2(var x:integer):integer;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

function TForm1.MyFun1(x: integer): integer;
begin
result:=x;
x:=100;
end;

function TForm1.MyFun2(var x: integer): integer;
begin
result:=x;
x:=100;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
a:integer;
begin
ShowMessage(IntToStr(MyFun1(a)));
ShowMessage(IntToStr(MyFun2(a)));
end;

end.
大家找找哪里的毛病?55555555
 
ShowMessage(IntToStr(MyFun1(a)));
ShowMessage(IntToStr(MyFun2(a)));
汗死。
procedure TForm1.Button1Click(Sender: TObject);
var
a:integer;
begin
a := 0;
ShowMessage(IntToStr(MyFun1(a)));
ShowMessage('MyFunc1调用过A后A的值是:' + IntToStr(a));
a := 0;
ShowMessage(IntToStr(MyFun2(a)));
ShowMessage('MyFunc2调用过A后A的值是:' + IntToStr(a));
end;
 
多人接受答案了。
 
后退
顶部