pchar问题(100分)

  • 主题发起人 主题发起人 HNXXCXG
  • 开始时间 开始时间
H

HNXXCXG

Unregistered / Unconfirmed
GUEST, unregistred user!
function GetStr(a:PChar='00';b:PChar='80'):PChar;<br>begin<br>&nbsp; Result:=PChar(string(a)+string(b));<br>end;<br><br>a:PChar='00';b:PChar='80'赋默认值通不过
 
改为function GetStr(a:string='00';b:string='80'):PChar;
 
must be pchar type ,no string
 
PChar实际上是一个Point,所以你不可以在函数的变量中赋默认值
 
To szhcracker:<br>貌似没有任何人说过“Pointer 不可以在函数的变量中赋默认值”:<br>function GetStr(a: PChar = nil; b: PChar = nil): PChar;<br>begin<br>&nbsp; Result:=PChar(string(a)+string(b));<br>end;<br><br>To 楼主:<br>之所以编译不能通过,这完全是在情理之中:<br>PChar 是个指针,对它可以赋默认值,这完全没问题,但必须保证这个默认值是固定的,这也是其它类型参数默认值的规律,并非 PChar 特殊;而诸如 '00' 的默认参数,它的地址是临时分配的,第一次调用时的 '00' 和第二次调用时的 '00' 的地址不一定相同,这就违背了 Delphi 参数默认值的规则,编译当然不能通过。<br>下面的写法都是正确的(但是没有虾米用):<br>function GetStr(a: PChar = Pointer($00000001); b: PChar = Pointer($00000002)): <br>function GetStr(a: PChar = nil; b: PChar = nil): PChar;<br>function GetStr(a: PChar = nil; b: PChar = Pointer($00000001)): PChar;<br>给楼主一点建议(我说话直,但并无恶意):<br>参数的默认值不是什么高科技,即使您的程序里大量用了这种方法,也不能表明你的程序高级到哪里去。如果您真的想连接两个 PChar,Delphi 有现成的函数 StrCat 和 StrLCat,谢谢!
 
szhcracker的意思是Pointer不能像lz那样赋值
 
To FreeAndNil:<br>我没看出来那个意思,谢谢!至于“Pointer不能像lz那样赋值”,我想这话是显然的,不然楼主就不会到这来问这个问题了...<br>如果我理解有误,请各位原谅,谢谢!
 
多人接受答案了。
 
后退
顶部