Delphi笔记.docx

上传人:b****3 文档编号:2151335 上传时间:2022-10-27 格式:DOCX 页数:25 大小:37.50KB
下载 相关 举报
Delphi笔记.docx_第1页
第1页 / 共25页
Delphi笔记.docx_第2页
第2页 / 共25页
Delphi笔记.docx_第3页
第3页 / 共25页
Delphi笔记.docx_第4页
第4页 / 共25页
Delphi笔记.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

Delphi笔记.docx

《Delphi笔记.docx》由会员分享,可在线阅读,更多相关《Delphi笔记.docx(25页珍藏版)》请在冰豆网上搜索。

Delphi笔记.docx

Delphi笔记

Delphi笔记-ObjectPascal的相关内容

Delphi学习笔记2007-12-0821:

15:

51阅读121评论0  字号:

大中小 订阅

Pascal有3种字符串类型:

1.ShortString

 该类型的字符串的最大长度为255个字符。

所占的内存中的第一个字节地址中存放字符

串的长度信息。

每个字符占一个字节的空间。

它所占的内存是静态分配的。

2.AnsiString

 是一种动态分配内存的字符串类型,最大长度为2的31次幂个字符,占2GB的内存空间。

它的变量是一个占4B内存的指针,指向动态内存。

每个字符占一个字节。

3.WideString

 也是一种动态分配内存的字符串类型,最大长度比AnsiString小一个字符。

它的效率

比AnsiString差。

每个字符占两个字节。

内存分配和释放函数:

AllocMem() FreeMem()

GlobalAlloc() GlobalFree()

GetMem() FreeMem()

New() Dispose()

StrAlloc() StrDsipose()

StrNew() StrDispose()

VirtualAlloc() VirtualFree()

SetLength()

函数和过程的重载要用关键字overload,类的函数和过程的覆盖要用override。

它们的区

别是:

重载的多个函数具有相同的函数名,不同的参数列表;覆盖用在父类与子类之间,

子类的同名函数覆盖父类的同名虚函数或动态函数。

 

数据类型表:

8位有符号整数:

ShortInt

8位无符号整数:

Byte

16位有符号整数:

SmallInt

16位无符号整数:

Word

32位有符号整数:

Integer,LongInt

32位无符号整数:

LongWord,Cardinal

64位有符号整数:

Int64

4字节浮点数:

Single

6字节浮点数:

Real48

8字节浮点数:

Double

10字节浮点数:

Extended

64位货币值:

currency

8字节日期/时间值:

TDateTime

16字节variant:

Variant,OleVariant,TVarData

1字节字符:

Char

2字节字符:

WideChar

固定长度(最大为255个字符)的字符串:

ShortString

动态字符串:

AnsiString,WideString

以NULL(即以#0)结束的字符串:

PChar,PWideChar

1字节布尔值:

Boolean,ByteBool

2字节布尔值:

WordBool

4字节布尔值:

BOOL,LongBool

当第一次声明了一个AnsiString变量时,它是没有长度的,也没有分配内存空间,

可以通过给它赋值或调用SetLength()函数来给它分配内存空间。

注意:

当它没有

分配空间时是不能像访问数组一样访问它的。

如果将AnsiString字符串强制转换成

PChar类型后,要将其转换回来则可以调用函数RealizeLength()

变体类型Variant主要是为了支持OLE自动化操作。

它能动态改变类型,例如:

var

 v:

Variant;

begin

 v:

='Delphi';

 v:

=1;

 v:

=124.22

 v:

=true;

 v:

=CreateOleObject('word');

end;

变体类型能支持所有的简单数据类型,如:

整数、浮点数、字符串、布尔值、日期和时间、

货币值和OLE自动化对象,但不支持ObjectPascal对象。

Variant类型的数据结构在System单元中的定义如下:

type

 PVarData=^TVarData;

 TVarData=packedrecord //该类型占16字节

   VType:

Word; //指示该变体类型代表的实际类型

   Reserved1,Reserved2,Reserved3:

Word;

   caseIntegerof

     varSmallInt:

(VSmallInt:

SmallInt);

     varInteger:

(VInteger:

Integer);

     varSingle:

(VSingle:

Single);

     varDouble:

(VDouble:

Double);

     varCurrency:

(VCurrency:

Currency);

     varDate:

(VDate:

Double);

     varOleStr:

(VOleStr:

PWideChar);

     varDispatch:

(VDispatch:

Pointer);

     varError:

(VError:

LongWord);

     varBoolean:

(VBoolean:

WordBool);

     varUnKnown:

(VUnknown:

Pointer);

     varByte:

(VByte:

Byte);

     varString:

(VString:

Pointer);

     varAny:

(VAny:

Pointer);

     varArray:

(VArray:

PVarArray);

     varByRef:

(VPointer:

Pointer);

 end;

Variant变量的VType域有两个特别的值:

varEmpty和varNull,varEmpty表示变量还没有

赋值,一般不能对它操作;varNull表示它表示了一个值nil,可以对它操作。

Variant数组:

var

 v:

Variant;

begin

 v:

=VarArrayCreate([1,4],varInteger);//创建了一个4个元素的整数数组

 v[1]:

=1;

 v[2]:

=2;

 v[3]:

=3;

 v[4]:

=4;

 v:

=VarArrayCreate([1,4,1,5],varInteger);//创建了一个4*5的二维数组。

 v:

=VarArrayOf([1,'Delphi',2.2]);//创建了一个有3个元素的数组

 {functionVarArrayOf(constValues:

arrayofVariant):

Variant;这个函数的参数

 是一个开放数组,它的元素个数和类型都是未知的。

}

end;

动态数组是可以动态地改变元素个数的数组。

声明动态数组时不要指明数组的元素个数和维数即可。

var

 sa,sb:

arrayofstring;

 sc:

arrayofarrayofInteger;//二维动态数组

begin

 SetLength(sa,20);

 sa[0]:

='Delphi';//动态数的下标通常是从0开始的。

 sa:

=nil;//释放动态数组的内存空间

 SetLength(sa,30);

 sa[0]:

='Hello";

 sb:

=sa;//sb和sa都指向同一块内存

 sb:

=Copy(sa);//sb指向一个由sa指向的内存拷贝来的内存。

 SetLength(sc,5,5);

end;

 

集合的元素的类型必须是有序类型、字符、枚举类型或子界类型。

元素个数不能超过255个,

当元素个数小于32时,它就存储在CPU的寄存器中,这样效率就高,所以应尽可能使集合元

素个数小于32。

集合的声明如下:

type

 TCharSet=setofchar;

 TEnum=(Monday,Tuesday,Wednesday,Theursday,Friday);

 TEnumSet=setofTEnum;

 TSubrangeSet=setof1..10;

 TAlphaSet=setof'a'..'z';

var

 CharSet:

TCharSet;

 EnumSet:

TEnumSet;

 AlphaSet:

TAlphaSet;

begin

 CharSet:

=['a'..'j','A','c'];

 EnumSet:

=[Monday,Friday];

 AlphaSet:

=[];

end;

集合的操作符号有:

in,+,-,*,其中+和-尽可能使用Include()和Exclude()过程来代替,因为使

用这两个过程只需要一条机器指令,而使用+和-需要13+6n(n为集合的按位长度)条机器指令。

指针相关问题:

 用New()能为一个指针分配确定长度的内存,该过程比GetMem()和AllocMem()更安全。

但不能用

New()为Pointer或PChar变量分配内存,因为编译器不知道这两种类型的指针需要多大内存。

这时要用GetMem()或AllocMem()来分配内存了。

AllocMem()比GetMem()更安全,因为AllocMem()总

是把分配的内存初始化为零。

 相同类型的指针是不兼容的,例如:

var

 a:

^Integer;

 b:

^Integer;

begin

 a^:

=10;

 b:

=a;//Error

end;

为了将a的值赋给b,可以采用以下方法:

type

 PInteger=^Integer;

var

 a,b:

PInteger;//或者:

a,b:

^Integer;

begin

 a^:

=10;

 b:

=a;

end;

类型别名:

type

 MyInteger=Integer;

 MyOtherInteger=typeInteger;

上面两者的区别在于:

MyInteger在任何情况下与Integer是相同的,而MyOtherInteger在用于赋值

目的的情况下与Integer相同,在作为var和out参数时与Integer不兼容。

例如:

procedureGoon(varvalue:

Integer);

begin

 //ToDo

end;

var

 m:

MyOtherInteger;

begidn

 m:

=10;

 Goon(m);//Error

end;

转义字符:

 #7:

响铃 #8:

退格 #9:

制表符 #10:

换行 #13:

回车#0:

字符串的结束符

以传递常量参数的方式调用例程,对于参数为字符串或记录来说能产生更优化的代码。

以传递开放数组的方式调用例程的例子如下:

functionfunc(a:

arrayofInteger):

Integer; //调用该函数时,实参是一个元素个数不确定的整数数组

var

 i:

Integer;

begin

 result:

=0;//Pascal的标准语法是:

函数名:

=返回值;

 fori:

=Low(a)toHigh(a)do

   inc(result,a[i]);

end;

procedureproc(a:

arrayofconst); //调用该函数时,实参是一个元素都为常量的数组,并且元素类型可以不相同

begin

 //ToDo;

end;

procedurefunc(a:

arrayofVariant);//调用该函数时,实参是一个元素个数和类型都不确定的数组,但所有元素的类型要相同

begin

 //ToDo;

end;

单元的两个可选部分:

initialization和finalization分别对该单元进行初始化和结束

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1