zoukankan      html  css  js  c++  java
  • 修饰符(动态String数组篇)--- 常用 解除疑问。

    1.无修饰符----是直接传基本类型的地址过来,并没有把基本类型的指针复制一份入栈,所以一旦修改就是修改原来的值。

     

    2.const 修饰符 与 无修饰符一致。

    3.var修饰符 与 上一致。

     

    4.out修饰符(不要初始化,初始化也没有意义)

     

    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);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form4: TForm4;
    
    implementation
    
    {$R *.dfm}
    
    procedure abc1(ap: TArray<string>);
    begin
      ap[0] := '李大嘴1';
    end;
    
    procedure abc2(const ap: TArray<string>);
    begin
      ap[0] := '李大嘴2';
    end;
    
    procedure abc3(var ap: TArray<string>);
    begin
      ap[0] := '李大嘴3';
    end;
    
    procedure abc4(out ap: TArray<string>);
    begin
      SetLength(ap, 3); //因为out的作用主要是输出,所以需要再这里进行分配内存,否则会报错
      //.out 修饰的东西会被当成栈中一个不指向堆中任何数据的空指针.
      ap[0] := '李大嘴4';
    end;
    
    procedure TForm4.Button1Click(Sender: TObject);
    var
      vt: TArray<string>;
    begin
      SetLength(vt, 3);
      vt[0] := '小李飞刀';
    
      abc4(vt);
      Memo1.Lines.Add(vt[0]);
    
      //动态数组也不需要释放,delphi会自动释放,可以看下面的汇编截图,与接口的引用计数释放方式又不同.
      //ip.Free;
    end;
    
    procedure TForm4.FormCreate(Sender: TObject);
    begin
      ReportMemoryLeaksOnShutdown := True;
    end;
    
    end.
  • 相关阅读:
    nodejs 核心模块crypto
    es6新特性学习
    nodejs 常用全局包
    ionic+angular+cordova 安卓环境搭建
    谷歌浏览器调试保存到文件
    Linux命令
    Linux中用户管理详解(上)-Linux学习日记
    liunx下忘记root密码的解决方法
    cvCanny的参数
    VC运行时库(/MD、/MT等)
  • 原文地址:https://www.cnblogs.com/del88/p/6690356.html
Copyright © 2011-2022 走看看