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.

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

时间: 2024-10-21 07:54:20

Delphi_05_Delphi_Object_Pascal_基本语法_03的相关文章

Java千百问_03基础语法(020)_注解、注释有什么区别

java注释注解×注释注解区别×注释注解混淆×java注释注解区别×注解与注释不同点× 点击进入_更多_Java千百问 1.注解.注释有什么区别 了解注释看这里:注释是什么 了解注解看这里:注解是什么 注解和注释很多人会混淆,它们之间的应用场景和具体使用完全不同,具体如下: 用途不同 注解通过标注包.类.字段.方法.局部变量.方法参数等元素,告诉JVM这些元素的附加信息(元信息). 注释是用来告诉开发人员这段代码的逻辑.说明.特点等,可以无限制的自由发挥. 具体使用不同 注解通过@来标注响应的元

Java千百问_03基础语法(021)_如何自定义注解

点击进入_更多_Java千百问color="#ff0000" 1.如何自定义注解 要学习使用注解,我们需要了解注解,并且了解java提供的常见注解.更重要的是学会自定义注解. 了解注释看这里:注释是什么 我们自定义注解需要使用@interface关键字,具体语法如下: public @interface 注解名 {定义体} default {默认值} 使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其

Java千百问_03基础语法(018)_注释是什么

点击进入_更多_Java千百问 1.注释是什么 java中的注释和其他编程语言中的注释一样,注释的内容不会被编译运行,只是源代码中对代码的解释说明. 通过添加代码注释可以提高源代码的可读性,使得Java程序条理清晰,易于区分代码行与注释行.另外,通常还会在类.方法或者代码段开头加入作者.添加/修改时间.程序版本以及代码功能等内容注释,方便后来的维护以及程序员的交流.(当然,对于好的代码,不写注释也能够有很高的可读性) 2.注释如何使用 对于Java注释,我们可以添加在代码中任何地方,主要语法有如

Java千百问_03基础语法(022)_元注解是什么

点击进入_更多_Java千百问 1.元注解是什么 了解注释看这里:注释是什么 了解自定义注解看这里:如何自定义注解 元注解就是负责注解其他注解.Java 5定义了4个标准的元注解(meta-annotation):@Target.@Retention.@Documented.@Inherited,这些元注解的类在java.lang.annotation包中,具体如下: @Target @Target说明了注解所修饰的对象范围,即所定义的注解可以用在什么地方.具体的取值有: CONSTRUCTOR

Java千百问_03基础语法(019)_注解是什么

点击进入_更多_Java千百问 1.注解是什么 java中的注解(Annotation),也叫元数据.是Java 5以后版本引入的一个特性. 注解与类.接口.枚举是在同一个层次,可以用来标注包.类.字段.方法.局部变量.方法参数等元素,达到对这些元素的描述和说明. 注解是可以允许jvm在运行中读取它,这一点与注释完全不同.并且包含多种加载策略,可以灵活配置. 了解注解.注释区别看这里:注解.注释有什么区别 如何自定义注解看这里:如何使用注解 2.注解有哪些加载策略 注解包含3中可配置的加载策略(

Java千百问_03基础语法(017)_static有什么用

点击进入_更多_Java千百问 1.static有什么用 static是java的关键字,用static声明达到静态的目的.所谓静态,就是在程序编译后就能被使用,不需要创建任何实例.static能够修饰类.方法.变量以及类代码块,具体如下: static方法 被static声明的方法叫做静态方法,不需要实例化对象通过类名直接调用的方法,最常见的是main(). 了解main方法看这里:main方法是什么 例如: public class TestStatic { public static vo

Java千百问_03基础语法(016)_main方法是什么

点击进入_更多_Java千百问 1.main方法是什么 某个类中有main()方法,说明这是一个java应用程序,可以直接启动运行的程序(操作系统中安装了jdk或者jre).任何一个非抽象类/接口都可以添加main()方法. 了解抽象类.接口看这里:接口和抽象类有什么区别 在java的规范中,main()方法的声明为: public static void main(String args[]){ } 当通过java运行工具运行某个类时:java 类名,jre会运行类中的main()方法.在运行

Java千百问_03基础语法(013)_>、>>、>>>有什么区别

点击进入_更多_Java千百问 1.>.>>.>>>有什么区别 了解java运算符看这里:java种的运算符都有哪些 了解java运算符优先级看这里:java运算符的优先级是怎样的 ">"属于关系运算符,而">>".">>>"则按位运算符,看一下它们各自的含义: 运算符> 关系运算符,表示大于. 如:if(a>b)-结果是boolean类型. 运算符>>

Java千百问_03基本语法(011)_final,finally,finalize有什么区别

点击进入_更多_Java千百问 1.final,finally,finalize有什么区别 final,finally是java的关键字,finalize是jdk的一个方法名,它们虽说字面意思类似,但是他们的使用却完全不同.具体如下: final final是一个修饰符关键字. 如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承. 如果一个变量或方法声明为final,可以保证它们在使用中不被改变.被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,