继续Delphi的学习之旅, 废话不多说,直接贴代码。
{ Delphi基本语法 1、对象 2、指针 3、类型别名 和 类型转换 } program DelphiObject; {$APPTYPE CONSOLE} uses SysUtils; type { 对象 1、对象通过关键字 class定义 2、对象可以看成是带函数或者过程的记录 3、对象通过 . 号引用对象的成员 4、这里简单的介绍一下对象,后面专门论述对象 } TClass = class className:string; end; { 指针 1、Delphi中的通用指针类型为 Pointer 2、指针可以通过Type 和 ^ 来定义一个新的数据类型 } //定义一个指针数据类型 PInt; PInt = ^Integer; { 类型别名 1、Delphi中的类型别名类似于C语言中的typedef 2、通过关键字 type 定义类型别名 3、语法格式为 type 类型别名 = 原类型名; 4、强类型别名, 强类型别名将生成一种新的数据类型,与代表的原类型不是 一种类型,语法格式如下 type 强类型别名 = type 原类型名 5、强类型别名和原类型在函数或者过程的 Out 或 In 参数中是不同的类型,这 需要注意,其他时候是赋值兼容的。 } stronglyTypeInt = type integer; var //定义指针变量 pIntTest:PInt; PIntTest1:PInt; varInt:integer; pointerStr:string; { 无类型指针 1、无类型指针通过 pointer 来定义 } pointerNoType : Pointer; //定义强类型别名变量 varStronglyInt:stronglyTypeInt; begin { 指针操作 1、New()函数分配新的内存空间,然后通过Dispose()释放申请的空间 2、指针赋值给指针 3、指针指向变量,通过 @ 操作符完成 4、引用指针变量指向的对象的值, 通过 ^ 运算符完成 5、new()函数/Dispose()函数分配的指针,又称为动态指针,可以根据数据类型 自动确定内存空间大小 6、GetMem()函数/FreeMem()函数也能动态分配,但是不能自动确定大小,需要手动 指定大小 } // New()函数申请指针 New(pIntTest); pointerStr := Format('%p',[pIntTest]); writeln(pointerStr); //指针变量赋值给指针变量 pIntTest1 := pIntTest; //通过Format将指针格式转化为字符串 pointerStr := Format('%p',[pIntTest1]); writeln(pointerStr); //指针指向变量 pIntTest1 := @varInt; //引用指针变量指向的值 varInt := 10 ; //通过Format将指针解引用转换化为字符串 pointerStr := 'Reference varInt via pointer:' + Format('%d',[pIntTest1^]); writeln(pointerStr); pIntTest^ := 100; //通过Format将指针解引用转换化为字符串 pointerStr := Format('%d',[pIntTest^]); writeln(pointerStr); //释放通过new()函数申请的空间 Dispose(pIntTest); // GetMem() 和 FreeMem() GetMem(pIntTest,sizeof(integer)); pIntTest^ := 56; writeln(pIntTest^); FreeMem(pIntTest, sizeof(integer)); //无类型指针指向变量 pointerNoType := @varInt; //无类型指针不能直接引用指向的变量 // pointerNotype ^ := 23; //错误 //无类型指针需要进行强制类型转换才能用,而且必须是指针类型才能转换 // integer(pointerNoType)^ := 23; 错误, 因为 integer 类型不是指针类型 PInt(pointerNoType)^ := 23; writeln(PInt(pointerNoType)^); //强类型别名定义的对象 varStronglyInt := varInt; writeln(varStronglyInt); { 强制类型转换 1、类型转换的语法格式为 类型名(表达式或者变量); } { PInt(pointerNoType)^ := 23; 语句先进行强制类型转换, 将 pointerNoType 强制转换为 Pint类型,然后再 ^ 解引用,最后进行赋值 } readln; end.
欢迎转载,转载请注明来源。