如果没有var的话,就是传值调用.在函数里修改该值,调用函数的地方没有影响.有var的话,就是传址调用.在函数里修改该值,调用函数的地方该值也被改变,所以参数必须是一个变量,而不能是一个常量.
解决方案 »
- 如果查询范围内数据不全怎么办?
- 小弟想做一套系统.不知道要采用哪用方案,各位大哥帮小弟出出主意.顺祝大家五一快乐!
- 用SQL语句判断数据库中是否有记录,怎么编写更完美!
- delphi中如何在菜单中添加第三方控件.
- (请大家畅谈软件人员的致富之道)搞软件技术的人如何在5年时间内赚到200万?
- 为什么不能同时安装gif与flash?
- 我在service中调用外部 *.exe , 在进程中已有指定的“Strcommand” .exe在运行,可是在桌面上却看不到?
- 200分求以下内容的答案:详情请进,Up也给分
- PC端要和安卓手机之间局域网内语音对讲,怎么实现呢;
- 如何得到局域网内的其他机器的IP和名称?急!急!。。。。谢谢!
- help!!! 为什么我的D6在编译时出现错误:“Fatal Error QuickRpt.pas(23):File not found:'Dsgnintf.dcu'
- 一个clientsocket的问题!当serversocket没有启动时,clientsocket总是有个弹出提示,如何不显示这个提示?
没有var,但是你的函数已经是一个指针了,有var和没有var已经没有区别了
把你的函数
function add(node_to_add:nodeType):boolean;
试试,
再加上
function add(var node_to_add: NodeType):boolean;
你就会知道区别了。
就算是指针,也有传值和传址的区别呀?例如:
procedure a(p:pointer);
begin
a := NIL;
end;
调用a(p);后,p指向的地址不变.procedure a(var p:pointer);
begin
a := NIL;
end;
调用a(p);后,p指向NIL
如
procedure TForm1.Button1OnClick(Sender: TObject);
begin
TButton(Sender).Caption := TButton(Sender).Caption + '1';
end;按理说,P (Sender)没有用var,那P(Sender)里面的值不会有变,但是P(Sender)确是改变了。
你写的是对该指针指向的地址的操作,而非对指针的操作.假如
procedure TForm1.Button1OnClick(Sender: TObject);
begin
Sender := NIL; //Sender不会被改变.
end;假如
procedure TForm1.Button1OnClick(var Sender: TObject);
begin
Sender := NIL; //错误! Sender被改变了!这也是为什么虽然该方法较快,但没有用var Sender: TObject的原因.
end;但在以上两种情况,Sender 的值都是一样的,即指向的地址是一样的,当然可以对里面的属性进行修改.唯一不同之处是可否对Sender 的值进行修改.
多谢多谢