zoukankan      html  css  js  c++  java
  • volcanol的工控博客

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

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

  • 相关阅读:
    联赛模拟测试22 D. 简单计算
    联赛模拟测试22 B. 分组配对 倍增+二分
    斜率优化DP总结
    洛谷 P5490 【模板】扫描线
    容斥原理学习笔记
    联赛模拟测试20 C. Weed 线段树
    联赛模拟测试20 B. Walk (建图)
    联赛模拟测试20 A. Simple (数学)
    洛谷 P2617 Dynamic Rankings 树套树
    社区团购模式
  • 原文地址:https://www.cnblogs.com/volcanol/p/5325292.html
Copyright © 2011-2022 走看看