关于过程和函数的幼稚问题 ( 积分: 30 )

  • 主题发起人 主题发起人 terry_zhou82
  • 开始时间 开始时间
T

terry_zhou82

Unregistered / Unconfirmed
GUEST, unregistred user!
请问函数或者过程后面的参数是不是起到以下的作用?
function add:integer;
var s,y:integer;
begin
result:=s+y;
end;
function add(var x,y:integer):integer;
begin
result:=s+y;
end;
以上2段函数是不是功能一样,是不是就省去了VAR这段代码呢? procedure 是不是也是这种性质的?
 
function add:integer;
var s,y:integer;
begin
result:=s+y;//s,y为函数内部变量,返回值由内部确定
end;
function add(var x,y:integer):integer;
begin
result:=s+y;//函数返回值由调用此函数的实参确定,并且在函数内部可以修改s,y的值,并影响到外部
end;

www.soware.cn
 
两个不同
如果你的代码是完全的,那么
前一个 print(add());//返回0
后一个 print(add(1,2));//返回3
怎么会是一样的呢?

"是不是就省去了VAR这段代码呢?"是指的什么?
function add(x,y:integer):integer;
begin
result := x + y;
end;
procedre add(x,y:integer;var z:integer);
begin
z := x + y;
end;
这上面两个 z 和result 的质是等效的,
你可能想知道这个吧,
如果把var z 变 z(去掉var ) 那么效果就不同了。

而且 function 的返回值 可以给一个属性,而
procedure 的var 类型 参数必须是 一个变量,
所以上面两个函数是不完全等效的
比如我们可以 edit1.taborder := add(1,2);//函数调用
add(1,2,edit1.taborder);//第三个参数必须是变量,而这里edit1.taborder是属性,就不行
必须用
var t:integer;
add(1,2,t);
edit1.taborder := t
//是不是要烦琐些啊
 
function add(x,y:integer):integer;
begin
result := x + y;//x,y在函数内部可以修改值,但不会影响外部的变量,
end;
function add(const x,y:integer):integer;
begin
result := x + y;//x,y在函数内部不能修改值,
end;

procedre add(x,y:integer;var z:integer);
begin
z := x + y;//调用时必须值一个z的实参,但在内部函数内部会忽略实参的初值,最后以x+y返回给外部
end;

procedre add(x,y:integer
out z:integer);
begin
z := x + y;//与Var差不多,为了同COM兼容
end;

www.soware.cn
 
不一样. 函数参数和函数内部变量 肯定不一样
 
function add:integer;
var s,y:integer;
begin
result:=s+y;
end;
s,y都被初始化为0,这一段传出值一定是0
 
后退
顶部