Delphi_05_Delphi_Object_Pascal_基本语法_03

Posted volcanol ---- View OF Linux Ca

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi_05_Delphi_Object_Pascal_基本语法_03相关的知识,希望对你有一定的参考价值。

  继续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.

 

  欢迎转载,转载请注明来源。

以上是关于Delphi_05_Delphi_Object_Pascal_基本语法_03的主要内容,如果未能解决你的问题,请参考以下文章

Delphi_04_Delphi_Object_Pascal_基本语法_02

delphi 四舍五入的坑

delphi 四舍五入的坑

Delphi/Cpp 等价于 PHP 中的 RawURLEncode

让 C++Builder/Delphi 在启动时创建 TForms,还是手动创建?

如何将C++头文件转换为delphi