记得把声明中的var和const与形式参数中的var和const区分开来!!
procedure TForm2.Button1Click(Sender: TObject);
procedure TestVarOutConst(var sStr01: string; out sStr02: string ; const sStr03: string ; sStr04:string );
const //只是定义常量而已
cHjp='ZXL';
var //这里声明了一个变量
vZXL:string ;
begin
//sStr02的值为空
ShowMessage('sStr01: '+sStr01+'/sStr02: '+sStr02+'/sStr03: '+sStr03+'/sStr04: '+sStr04);
{这里show值时由于形参参数2是out,故形参参数2的实参的值会被忽略,即为空。
待下面代码执行之后,参数2的值就变成了‘sStr02’。}
sStr01:='sStr01';
sStr02:='sStr02';
//sStr03:='sStr03';//这个也算一个常量,因为没有引用计数,所以不能修改,这样写编译不过去
//方法中的const形式参数有时也相当于一个常数,不能在方法中给此形式参数赋值;
{字符串和动态数组比较特殊,有引用计数一说,动态数组有引用计数,静态数组没有引用计数,
这些比较复杂,,,先把声明中的var和const与形式参数中的var和const区分开来就好了,后续
再深入了解。}
sStr04:='sStr04';
end;
var
vStr01,vStr02,vStr03,vStr04:string;
begin
{注意形参
var sStr01: string //传地址
out sStr02: string //这个也是传地址,但是忽略实参的值
const sStr03: string //const的意思 不做引用计数
}
//形参都是字符串类型,只是为了好测试
vStr01:='vStr01';
vStr02:='vStr02';
vStr03:='vStr03';
vStr04:='vStr04';
TestVarOutConst(vStr01,vStr02,vStr03,vStr04);
//这里可以看出vStr01,vStr02的值改变了
ShowMessage('vStr01: '+vStr01+'/vStr02: '+vStr02+'/vStr03: '+vStr03+'/vStr04: '+vStr04);
end;