修饰符(动态数组篇)

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;

  /// <summary>
  /// 定义一个结构(测试这个结构的动态数组)
  /// </summary>
  TRen = record
    name: string;
    age: Integer;
  end;

var
  Form4: TForm4;

implementation

{$R *.dfm}

procedure abc1(ap: TArray<TRen>);
begin
  ap[0].name := ‘李大嘴1‘;
  ap[0].age := 10;
end;

procedure abc2(const ap: TArray<TRen>);
begin
  ap[0].name := ‘李大嘴2‘;
  ap[0].age := 10;
end;

procedure abc3(var ap: TArray<TRen>);
begin
  ap[0].name := ‘李大嘴3‘;
  ap[0].age := 10;
end;

procedure abc4(out ap: TArray<TRen>);
begin
  SetLength(ap, 3); //因为out的作用主要是输出,所以需要再这里进行分配内存,否则会报错
  //.out 修饰的东西会被当成栈中一个不指向堆中任何数据的空指针.
  ap[0].name := ‘李大嘴4‘;
  ap[0].age := 10;
end;

procedure TForm4.Button1Click(Sender: TObject);
var
  vt: TArray<TRen>;
begin
//  SetLength(vt, 3);
//  vt[0].name := ‘小李飞刀‘;
//  vt[0].age := 18;

  abc4(vt);
  Memo1.Lines.Add(vt[0].name);
  Memo1.Lines.Add(vt[0].age.ToString);

  //动态数组也不需要释放,delphi会自动释放,可以看下面的汇编截图,与接口的引用计数释放方式又不同.
  //ip.Free;
end;

procedure TForm4.FormCreate(Sender: TObject);
begin
  ReportMemoryLeaksOnShutdown := True;
end;

end.
时间: 2024-11-01 12:51:38

修饰符(动态数组篇)的相关文章

修饰符(整数篇)

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; Button2: TButto

Powershell 数组的使用(一)【动态数组】

在上文中我们介绍了如何使用[静态数组],内容涉及到数组的创建.元素的添加删除等操作,很显然,通过该种方式去操作一个数组是非常麻烦的,静态数组的目的在于让大家了解数组的基本概念和操作,在实际使用数组的脚本中,我们会创建动态数组来更好的提高脚本运算速度和易编写性. 动态数组.使用.Net的类来进行定义,它除了像静态数组一样可以进行比较,索引查找外还可以很方便的进行元素变更,在循环添加元素时它也是自由的去添加单个元素而不是重新定义整个数组,因而极大的提高了脚本的运算速度. 一. 动态数组的定义,动态数

修饰符(动态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.C

java——关于数组的定义 和 访问修饰符的修饰内容

public class Shuzu { public static void main(String[] args) { // 定义数组 必须初始化长度,没有初始化要放数据 int[] in = { 1, 2, 3, 4, 5, 6 }; // 第一种方法:直接赋值 for (int i = 0; i < in.length; i++) { System.out.print(in[i] + "\t"); } System.out.println(); int[] in1 = n

Python_day8_面向对象(多态、成员修饰符、类中特殊方法、对象边缘知识)、异常处理之篇

一.面向对象之多态 1.多态:简而言子就是多种形态或多种类型 python中不支持多态也用不到多态,多态的概念是应用与java/C#中指定传参的数据类型, java多态传参:必须是传参数的数据类型或传参的子类类型 面向对象总结: 面向对象是一种编程方式,此编程方式的实现是基于类和对象的使用 类:是一个模板,模板中包含了多个函数共使用,即类中可包含多个函数(类中的函数即叫做方法) 一般疑问: 1)什么样的代码才是面向对象? 简单来说,如果程序中的所有功能否是由 “类”和“对象”实现,那么就是面向对

新年在家学java之基础篇-参数&amp;修饰符&amp;构造器

可变参数 不知道可能给方法传递多少个参数时使用这个方法 public void printInfo (String[] args) --可以定义一个数组,在调用这个方法适合赋值给一个数组 public void aaa (String... args) --用java特有的...来传递可变个数的参数,在使用时,与数组的使用方式相同 如果使用数组,在调用方法是要用 a.printInfo(null):没有参数就要定义一个空数组或者null,而第二种是可以直接使用a.aaa(); 如果一个方法有多个

OC 属性修饰符篇

一.MRC 与 ARC 各自的属性修饰符 1 // 属性修饰符按代码规范的顺序 2 // 是否原子操作.是否可读写.内存管理 3 @property (nonatomic, readwrite, copy) NSString *str; 4 // PS:属性修饰符顺序并没有硬性规定. 二.内存管理修饰符 MRC 模式下属性修饰符 retain: 引用计数加1. assign: 分配内存,类似于copy.常用于基本数据类型,比如:int,long,NSInteger等. ARC 模式下属性修饰符

第二十二篇 玩转数据结构——构建动态数组

1.. 数组基础 数组就是把数据码成一排进行存放. Java中,数组的每个元素类型必须相同,可以都为int类型,string类型,甚至是自定义类型. 数组的命名要语义化,例如,如果数组用来存放学生的成绩,那么命名为scores就比较合适. 索引(index)是数组中的一个重要概念,它是我们给数组中的每个元素分配的编号,从0开始,依次递增.如果数组中存放了n个元素,第一个元素的索引是0,最后一个元素的索引是n-1. 通过索引,我们可以对数组中的元素进行快速访问,例如,我们访问索引为2的元素也就是数

Vue学习之路第八篇:事件修饰符

学习准备: ①.顾名思义,"事件修饰符"那么肯定是用来修饰事件,既然和事件有关系,那么肯定和"v-on"指令(也可简写为:@)有关系了. ②.事件修饰符有以下几类: .stop:阻止冒泡 .prevent:阻止默认事件 .capture:事件捕获 .self:只当事件在该元素本身触发时触发回调 .once:事件只触发一次 1.阻止冒泡 页面代码: <div id="app" @click="clickDiv()">