关于Delphi过程或者函数的参数时,有var与无var的区别

在网上看到这样的代码

语句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是传参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值