在定义过程时,什么时候用var,什么时候用const,什么时候两者都不用?(30分)

  • 主题发起人 主题发起人 cnzzlp
  • 开始时间 开始时间
C

cnzzlp

Unregistered / Unconfirmed
GUEST, unregistred user!
如题看以下三个过程的定义,初学者,谢谢
procedure SetVideoLandBgColor(const AColor: Integer);
procedure UMCloseChat(var Msg: TMessage); message UM_CloseChat;
procedure SetNetstatus(Value, NetstatusId: Integer);
 
要决定使用哪个,或者两个都不使用,只要明白它们的作用就会判断了,
var 传递参数的时候传递参数的地址,也就是说,过程的内部可以直接修改这参数的值,而这个修改会直接影响到过程外部;
const 传递或把参数作为一个常量传递进去,在过程里不允许修改这个常量的值;
两个都不用 传递该参数的值进去,过程里面允许修改这个参数的值,但是不会影响到过程的外部。
 
过程与函数中的参数,闲来无事给你总结一下:
最常用的三种:数值参数、变量参数和常量参数
1)数值参数:在运行过程中只改变其形参的值,不改变其实参的值,即参数的值不能传递到
过程的外面,如以下例程:
procedure calculate(CalNo: Integer);
begin
CalNo := CalNo * 10;
end;
调用:calculate(Number);
Number实参复制给形参CalNo,CalNo增大10倍,但未传递出来,Number值不变。
这是由于形参和实参占用了不同的内存地址,在过程或函数被调用时,将实参的值复制到
形参占用的内存中,因此,出了过程或函数后,形参和实参的值是不同的,实参的值并不发生
变化。
2)变量参数:会改变传入的参数值,即实参的值,如:
procedure calculate(var CalNo: Integer);
begin
CalNo := CalNo * 10;
end;
调用:calculate(Number);
此时,由于在被调用程序的参数表(即形参)前加上保留字var,则CalNo并不在内存中占
据一个位置,而是指向实参Number,当一个实参被传递时,形参任何的改变都会反映到实参中,
这是因为两个参数指向同一个地址,因而CalNo和Number的值都是Number初始值的10倍。
3)常量参数:如果过程或函数执行时不要求改变形参的值,就使用该参数,需要加Const声明
 
VAR是可以作重复赋值的变量
CONST是不要赋值的变量
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部