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 := ;
//通过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的更多相关文章
- Java千百问_03基本的语法(005)_二进制是如何做位运算的
点击进入_很多其它_Java千百问 二进制是如何做位运算的 程序中的全部数在计算机内存中都是以二进制的形式储存的.位运算说白了,就是直接对整数在内存中的二进制位进行操作. 其它运算符看这里:java种 ...
- Java千百问_03基本的语法(001)_局部变量、类变量、实例变量有什么差别
点击进入_很多其它_Java千百问 局部变量.类变量.实例变量有什么差别 在聊局部变量.类变量.实例变量有什么差别之前,我们须要了解一下Java变量. 1.Java变量是什么 在数学世界中,我们知道有 ...
- Java基础知识二次学习-- 第二章 基础语法与递归补充
第二章 基础语法与递归补充 时间:2017年4月24日10:39:18 章节:02章_01节,02章_02节 视频长度:49:21 + 15:45 内容:标识符,关键字与数据类型 心得:由字母,下 ...
- 我的MYSQL学习心得(一) 简单语法
我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- Swift与C#的基础语法比较
背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...
- 探索C#之6.0语法糖剖析
阅读目录: 自动属性默认初始化 自动只读属性默认初始化 表达式为主体的函数 表达式为主体的属性(赋值) 静态类导入 Null条件运算符 字符串格式化 索引初始化 异常过滤器when catch和fin ...
- [C#] 回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性
回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性 序 目前最新的版本是 C# 7.0,VS 的最新版本为 Visual Studio 2017 RC,两者都尚未进入正式阶段.C# 6.0 ...
- Velocity初探小结--velocity使用语法详解
做java开发的朋友一般对JSP是比较熟悉的,大部分人第一次学习开发View层都是使用JSP来进行页面渲染的,我们都知道JSP是可以嵌入java代码的,在远古时代,java程序员甚至在一个jsp页面上 ...
- node.js学习(二)--Node.js控制台(REPL)&&Node.js的基础和语法
1.1.2 Node.js控制台(REPL) Node.js也有自己的虚拟的运行环境:REPL. 我们可以使用它来执行任何的Node.js或者javascript代码.还可以引入模块和使用文件系统. ...
随机推荐
- 根据ip判断返回城市名称查询当地天气
<?phpheader("content-type:text/html;charset=utf-8");date_default_timezone_set("Asi ...
- PHP设计模式(四)单例模式(Singleton For PHP)
今天讲单例设计模式,这种设计模式和工厂模式一样,用的非常非常多,同时单例模式比较容易的一种设计模式. 一.什么是单例设计模式 单例模式,也叫单子模式,是一种常用的软件设计模式.在应用这个模式时,单例对 ...
- Git的四个基本概念及 git的工作流程
- MongoDB备份(mongodump)和恢复(mongorestore)
MongoDB提供了备份和恢复的功能,分别是MongoDB下载目录下的mongodump.exe和mongorestore.exe文件 1.备份数据使用下面的命令: >mongodump -h ...
- linux启动SSH及开机自动启动
本文地址 分享提纲: 1.查看是否启动 2. 设置自动启动 1.[查看是否启动] 启动SSH服务 “/etc/init.d/sshd start”.然后用netstat -antulp | grep ...
- 【一起学OpenFoam】01 OpenFoam的优势
CFD技术发展到今天,已经超过了大半个世纪了,已经涌现出非常多的CFD软件可供人们使用.通用商业CFD软件譬如Fluent.CFX.Star CCM+等在工业上得到了广泛的应用,另外一些专用的软件(如 ...
- ASP.NET 5 改名 ASP.NET Core 1.0
今天,Scott Hanselman在其博客上宣布<ASP.NET 5 is dead - Introducing ASP.NET Core 1.0 and .NET Core 1.0>, ...
- Lesson 16 A polite request
Text If you park your car in the wrong place, a traffic policeman will soon find it. You will be ver ...
- Nodejs之MEAN栈开发(八)---- 用户认证与会话管理详解
用户认证与会话管理基本上是每个网站必备的一个功能.在Asp.net下做的比较多,大体的思路都是先根据用户提供的用户名和密码到数据库找到用户信息,然后校验,校验成功之后记住用户的姓名和相关信息,这个信息 ...
- Android动态改变布局
遇到这么个需求,先看图: 其实是一个软件的登录界面,初始是第一个图的样子,当软键盘弹出后变为第二个图的样子,因为登录界面有用户名.密码.登录按钮,不这样的话软键盘弹出后会遮住登录按钮(其实之 ...