继续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 := ;
//通过Format将指针解引用转换化为字符串
pointerStr := 'Reference varInt via pointer:' + Format('%d',[pIntTest1^]);
writeln(pointerStr); pIntTest^ := ;
//通过Format将指针解引用转换化为字符串
pointerStr := Format('%d',[pIntTest^]);
writeln(pointerStr);
//释放通过new()函数申请的空间
Dispose(pIntTest); // GetMem() 和 FreeMem()
GetMem(pIntTest,sizeof(integer));
pIntTest^ := ;
writeln(pIntTest^);
FreeMem(pIntTest, sizeof(integer)); //无类型指针指向变量
pointerNoType := @varInt;
//无类型指针不能直接引用指向的变量
// pointerNotype ^ := 23; //错误
//无类型指针需要进行强制类型转换才能用,而且必须是指针类型才能转换
// integer(pointerNoType)^ := 23; 错误, 因为 integer 类型不是指针类型
PInt(pointerNoType)^ := ;
writeln(PInt(pointerNoType)^); //强类型别名定义的对象
varStronglyInt := varInt;
writeln(varStronglyInt); { 强制类型转换
1、类型转换的语法格式为
类型名(表达式或者变量);
}
{
PInt(pointerNoType)^ := 23; 语句先进行强制类型转换, 将 pointerNoType
强制转换为 Pint类型,然后再 ^ 解引用,最后进行赋值
} readln;
end.

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

Delphi_05_Delphi_Object_Pascal_基本语法_03的更多相关文章

  1. Java千百问_03基本的语法(005)_二进制是如何做位运算的

    点击进入_很多其它_Java千百问 二进制是如何做位运算的 程序中的全部数在计算机内存中都是以二进制的形式储存的.位运算说白了,就是直接对整数在内存中的二进制位进行操作. 其它运算符看这里:java种 ...

  2. Java千百问_03基本的语法(001)_局部变量、类变量、实例变量有什么差别

    点击进入_很多其它_Java千百问 局部变量.类变量.实例变量有什么差别 在聊局部变量.类变量.实例变量有什么差别之前,我们须要了解一下Java变量. 1.Java变量是什么 在数学世界中,我们知道有 ...

  3. Java基础知识二次学习-- 第二章 基础语法与递归补充

    第二章 基础语法与递归补充   时间:2017年4月24日10:39:18 章节:02章_01节,02章_02节 视频长度:49:21 + 15:45 内容:标识符,关键字与数据类型 心得:由字母,下 ...

  4. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  5. Swift与C#的基础语法比较

    背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...

  6. 探索C#之6.0语法糖剖析

    阅读目录: 自动属性默认初始化 自动只读属性默认初始化 表达式为主体的函数 表达式为主体的属性(赋值) 静态类导入 Null条件运算符 字符串格式化 索引初始化 异常过滤器when catch和fin ...

  7. [C#] 回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性

    回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性 序 目前最新的版本是 C# 7.0,VS 的最新版本为 Visual Studio 2017 RC,两者都尚未进入正式阶段.C# 6.0 ...

  8. Velocity初探小结--velocity使用语法详解

    做java开发的朋友一般对JSP是比较熟悉的,大部分人第一次学习开发View层都是使用JSP来进行页面渲染的,我们都知道JSP是可以嵌入java代码的,在远古时代,java程序员甚至在一个jsp页面上 ...

  9. node.js学习(二)--Node.js控制台(REPL)&&Node.js的基础和语法

    1.1.2 Node.js控制台(REPL) Node.js也有自己的虚拟的运行环境:REPL. 我们可以使用它来执行任何的Node.js或者javascript代码.还可以引入模块和使用文件系统. ...

随机推荐

  1. 游戏AI系列内容 咋样才能做个有意思的AI呢

    游戏AI系列内容 咋样才能做个有意思的AI呢 写在前面的话 怪物AI怎么才能做的比较有意思.其实这个命题有点大,我作为一个仅仅进入游戏行业两年接触怪物AI还不到一年的程序员来说,来谈这个话题,我想我是 ...

  2. python 数据类型 ---文件一

    1.文件的操作流程: 打开(open), 操作(read,write), 关闭(close) 下面分别用三种方式打开文件,r,w,a 模式 . "a"模式将不会覆盖原来的文件内容, ...

  3. java中易错点(二)

    java,exe是java虚拟机 javadoc.exe用来制作java文档 jdb.exe是java的调试器 javaprof,exe是剖析工具 解析一: sleep是线程类(Thread)的方法, ...

  4. Lind.DDD.LindAspects方法拦截的介绍

    回到目录 什么是LindAspects 之前写了关于Aspects的文章<Lind.DDD.Aspects通过Plugins实现方法的动态拦截~Lind里的AOP>,今天主要在设计思想上进 ...

  5. [Hadoop in Action] 第7章 细则手册

    向任务传递定制参数 获取任务待定的信息 生成多个输出 与关系数据库交互 让输出做全局排序   1.向任务传递作业定制的参数        在编写Mapper和Reducer时,通常会想让一些地方可以配 ...

  6. 【微信SEO】公众号也能做排名?

    [写于2016年8月] 最近,微信团队发出一则公告,开放公众号运营者一年内更改公众号名一次,这对不少名字起的奇葩名字(包括dkplus)的公众号来说是一件好事. 为什么说是好事呢?公众号名字直接关联到 ...

  7. 为支持ASP.NET5跨平台,Jexus再添新举措

    Jexus作为一款运行于Linux/FreeBSD平台上,以支持ASP.NET著称的高性能HTTP服务器和反向代理服务器,继5.6版完成对OWIN标准应用的支持后,就把着力点放到了对ASP.NET5的 ...

  8. .NET基础拾遗(7)Web Service的开发与应用基础

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开发基 ...

  9. 免费的精品: Productivity Power Tools 动画演示

    Productivity Power Tools 是微软官方推出的 Visual Studio 扩展,被用以提高开发人员生产率.它的出现一定程度上弥补和完善了 Visual Studio 自身的不足, ...

  10. CSharpGL(36)通用的非托管数组排序方法

    CSharpGL(36)通用的非托管数组排序方法 如果OpenGL要渲染半透明物体,一个方法是根据顶点到窗口的距离排序,按照从远到近的顺序依次渲染.所以本篇介绍对 UnmanagedArray< ...