var参数和指针类型参数的区别在哪里?(50分)

  • 主题发起人 主题发起人 ziyu
  • 开始时间 开始时间
Z

ziyu

Unregistered / Unconfirmed
GUEST, unregistred user!
1:
procedure aa(var Con:TADOConnection);
begin
//...
end;

2:
type PCon=^TADOConnection;

procedure aa(Con:PCon);

这两种方法的区别在哪里,烦请各位大虾详细解释一下

 
procedure aa(var Con:TADOConnection);

procedure aa(Con:TADOConnection);
一样,其实传的都是指针
 
其实TADOConnection就是指针,PCon是指针的指针了
var A: TADOConnection
//A就是指针

procedure aa(var Con:TADOConnection);

procedure aa(Con:TADOConnection)
效果一样
 
指针类型参数也可以是VAR型的!
 
用var就是C++中的传引用,形参与实参在同一个内存空间

 
类型调用实参已经保证空间了,指针不保证,需要调用者维护
 
用的时候一个加^,一个不加
 
var 传递的是参数地址,
不加var ,传递是参数值。
 
to 203010:
>>var A: TADOConnection
//A就是指针
A 是指向谁的指针?
to xianjun
var 类型的指针参数又代表什么意思?
to jps_exp
>>用var就是C++中的传引用,形参与实参在同一个内存空间
方法2也是啊,调用的时候实参是 @adoconnection1之类的啊, 直接传递的地址嘛,
那方法1和方法2就没区别了?

我也知道两者都是传地址,我只想问清楚它们两者之间到底有没有区别



 
Var和指针传递的东东是一样,但在函数中使用方法不一样。Var a:tadoconnection是指
向tadoconnection类的一个实例的指针。@adoconnection1是指针的指针。
 
to jps_exp
方法2怎么不接着讲下去呢?而且,>>aa(PConn);//2 或aa(^Conn);
调用的时候传的实参也不是^Conn吧
 

是写错了,应该是aa(@Conn);

如果在使用上,方法1和2都可以.
不过方法1具体怎么做是由编译器实现的,对Con操作就是对Conn操作,
而方法2完全由自己管理,对Con操作并不对Conn操作,要Con^这样用才是对Conn操作
 
1:
procedure aa(var Con:TADOConnection);
begin
//...
end;

2:
type PCon=^TADOConnection;

procedure aa(Con:PCon);

假设象下面这样用:
var
Conn: TADOConnection;
PConn: PCon;
begin
.....;
aa(Conn);//1
//这时Conn与aa执行中的Con是同一个变量,名不同,在内存中的位置一样
//可以取Conn与Con的地址比较一下
aa(PConn);//2 或aa(@Conn);
//这里执行时有Con := PConn;(或Con := @Conn)的操作.
.....;
end;
 
DELPHI 的VAR
最大最可恶的地方是:
往往是抛错媚眼,很多WINAPI本来是可以指针为空的,调用为nil就可以了,
到了DELPHI翻译之后却不得不申明个变量,少不了还得赋些初值
 
多人接受答案了。
 
后退
顶部