在网上看到这样的代码
语句3和语句4显示的结果为什么与语句1和语句2显示的结果不一致?
Test(var T: TTest)和Test(T: TTest)有什么区别?
Test(var T: TTest)和Test(T: TTest)哪一个对系统的开销小?
为什么基本数据类型和类的思想不一致?
-------------------------------------------------
与之对应的C++的代码如下
-------------------------------------------------
简单来说,有var表示允许你对这个数据更改,没var则不能更改。
但对于(Object: TClass)和(var Object: TClass)来说,两者都可以对数据进行修改,上面的例子说明了这一点。
对变量而言,其存在于栈中,不用var相当于在栈复制一个副本;而对象则被创建于堆中,我想其不能在参数传递时自动再复制一个自己而无论有无var始终当引用方式来调用,即只传指针过去
1 (Object: TClass)和2 (var Object: TClass)
1中是按值进行传递的,形参与实参就相当于两个变量。2中是按引用传递的,形参与实参就相当于一个变量,两个指针,一个指针是另一个指针的副本,但是它们所指向的内存地址都是相同的。
1 function Fa(value:integer):Integer;
begin
value:=value+1;
result:=value;
end;
2 function Fb(var value:Integer):integer;
begin
value:=value+1;
result:=value;
end;
var
Fa,a,Fb,b:Integer;
begin
a:=3;
Fa:=fa(a); //这时 fa等于4,a等于3
b:=3;
fb:=fb(b); //这时 fb等于4,b等于4
end;
或者换句话说,有var是传地址,没有var是传参数。