• 修饰符(字符篇)


    AnsiChar 与 WideChar,经过测试他们一样,所以仅以WideChar为例:

    unit Unit4;
    
    interface
    
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
    
    type
      TForm4 = class(TForm)
        Button1: TButton;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form4: TForm4;
    
    implementation
    
    {$R *.dfm}
    
    procedure AnsiChar1(a: AnsiChar);
    begin
      a := 'a';
    end;
    
    procedure AnsiChar2(const a: AnsiChar);
    var
      b: AnsiChar;
    begin
      //什么都不做,方便调试.
      b := 'b';
    end;
    
    procedure AnsiChar3(var a: AnsiChar);
    begin
      a := 'a';
    end;
    
    procedure AnsiChar4(out a: AnsiChar);
    begin
      a := 'a';
    end;
    
    procedure WideChar1(a: WideChar);
    begin
      a := 'a';
    end;
    
    procedure WideChar2(const a: WideChar);
    var
      b: WideChar;
    begin
      //什么都不做,方便调试.
      b := 'b';
    end;
    
    procedure WideChar3(var a: WideChar);
    begin
      a := 'a';
    end;
    
    procedure WideChar4(out a: WideChar);
    begin
      a := 'a';
    end;
    
    procedure TForm4.Button1Click(Sender: TObject);
    var
      c: WideChar;
    begin
      c := '';
      WideChar4(c);
      Memo1.Lines.Add(c);
    end;
    
    end.

    1.无修饰符----传值,值被复制一份入栈。

    栈中内存编号发生变化,说明值被复制了一份入栈。

    2.const 修饰符---值被复制一份入栈,函数内不能修改

     3.var修饰符-----传递过来的是原来值的地址,函数内部可修改,如果修改的话就是修改原来的值。 

     4.out修饰符----------传递过来的是原来值的地址,函数内部可修改,如果修改的话就是修改原来的值。

  • 相关阅读:
    swift制作framework过程
    Redis学习
    Mysql vs NoSql vs NewSql
    Mysql实践
    跨库分页解决方案[转]
    二分查找解题套路框架 [转]
    Service Mesh [转]
    Golang Case
    [转]分布式服务限流
    保险
  • 原文地址:https://www.cnblogs.com/del88/p/6392893.html
Copyright © 2020-2023  润新知