• 面试-默认参数(传值)、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;

  • 相关阅读:
    Typora入门使用
    什么是Structed Streaming?
    Spark的join什么情况下可以避免shuffle?
    spark Executor启动过程分析
    在IDEA中使用Git
    Git和SVN的区别
    Flink on Yarn的两种模式
    如何查看执行计划
    SQL Server 堆表与栈表的对比(大表)
    SQL Server中CURD语句的锁流程分析
  • 原文地址:https://www.cnblogs.com/FKdelphi/p/6432664.html
Copyright © 2020-2023  润新知