面试-默认参数(传值)、var(传址)、out(输出)、const(常数)
相关资料:
1.http://blog.csdn.net/rznice/article/details/6960011
2.http://www.cnblogs.com/echomyecho/archive/2012/03/04/2379077.html
一、默认参数(传值)
1.默认参数是传值, 不会被改变
2.方法创建了一个新的AValue,而输出的还是原来的AValue,值并没有改变
function MyF1(AValue: Integer): Integer;
begin
Inc(AValue);
Result := AValue;
end;
二、var(传址)
1.var参数是传址, 会被改变
function MyF2(var AValue: Integer): Integer;
begin
Inc(AValue);
Result := AValue;
end;
三、out(输出)
1.out参数是为支持Com的, 和 var 的结果是一样的, 一般我们用不着它
2.对out的任何输入都会被忽略。
3.同时out传递给过程的实际参数不必进行初始化
function MyF3(out AValue: Integer): Integer;
begin
Inc(AValue);
Result := AValue;
end;
四、const(常数)
1.const参数是绝对不可以赋值的, 这是被编译器优化的方式, 尽量多用
2.Const修饰的参数传入之后不允许修改如果在过程中修改参数会报错
function MyF4(const AValue: Integer): Integer;
begin
//Inc(AValue); //这句会出错。
Result := AValue;
end;
//调用测试
procedure TForm1.Button1Click(Sender: TObject);
var
n: Integer;
begin
n := 1; MyF1(n);
ShowMessage(IntToStr(n)); //1
n := 1; MyF2(n);
ShowMessage(IntToStr(n)); //2
n := 1; MyF3(n);
ShowMessage(IntToStr(n)); //2
n := 1; MyF4(n);
ShowMessage(IntToStr(n)); //1
end;
//****************** 以下是传对象为例 ******************************//
1.自定义对象
type
TMyClass = class
FID: Integer;
FName: string;
end;
2.定义函数
function SetValue1(AMyClass: TMyClass): Boolean;
begin
AMyClass.FID := 1;
AMyClass.FName := 'ZJQ1';
end;
function SetValue2(var AMyClass: TMyClass): Boolean;
begin
AMyClass.FID := 1;
AMyClass.FName := 'ZJQ2';
end;
function SetValue3(out AMyClass: TMyClass): Boolean;
begin
AMyClass.FID := 1;
AMyClass.FName := 'ZJQ3';
end;
function SetValue4(const AMyClass: TMyClass): Boolean;
begin
AMyClass.FID := 1;
AMyClass.FName := 'ZJQ4';
end;
3.结果情况
procedure TForm2.Button1Click(Sender: TObject);
var
MyClass: TMyClass;
begin
MyClass := TMyClass.Create;
SetValue1(MyClass);//地址32264000
ShowMessage(MyClass.FName);//zjq1
SetValue2(MyClass);//地址32264000
ShowMessage(MyClass.FName);//zjq2
SetValue3(MyClass);//地址32264000
ShowMessage(MyClass.FName);//zjq3
SetValue4(MyClass);//地址32264000
ShowMessage(MyClass.FName);//zjq4
end;
欢迎关注我,一起进步!扫描下方二维码即可加我