delphi中String 和 动态静态数组

默认string类型为ansiString;有编译开关控制

shortString:

strShort : shortString;

strShort 大小256字节,可根据sizeof()计算出,strShort[0]存储字符串长度,所以最大为255。

全局变量strShort 默认初始化为空字符串,长度length为0;

局部变量strShort 不初始化,长度无意义;所以局部变量strShort 尽量初始化空字符串使用。

另外strShort[1] := 'A';这样的赋值操作并不会改变strShort,Length的大小,strShort := 'A'这样的赋值语句才会改变strShort[0]的大小=1。

setlength方法能改变其现有字符长度,但不会改变所占字节大小,也不会改变长度外的内容。

ansiString:

strAnsi : ansiString;

strAnsi 类似一个动态字符数组(GBK,字符占1字节,中文占2字节),容量最大为2G,变量默认占一个指针的大小4字节(sizeof),可以用setlength方法设置字符容量,如:setlength(strAnsi,1024*1024)。

strAnsi 全局、局部变量都为空字符串,strAnsi[0] 不可访问,访问其元素strAnsi[i]时需要先对strAnsi 设置长度,或者直接赋值strAnsi :='123456';

setlength方法能改变其长度还有所占容量大小,舍弃的字节并不会初始化为#0。setlength(strAnsi,0)等于strAnsi :='';

widestring:

strWide : wideString;

strWide 与ansistring类似,但是所有字符都占2个字节(usc)。strWide[i]为widechar类型;sizeof大小为2字节,length为包含字符的个数(中英文占长度相同)。

array:

aryD : array of byte,动态数组aryD变量名是一个指针,指向第一个元素aryD[0]的地址,用setlength方法设置其长度,元素都是从下标0开始计数,最大长度为2G,对aryD做赋值操作只是改变他的指向。

和long string类型,都是采用引用计数的方法来管理内存,三种方法释放其内存,finalize(aryD)、setlength(aryD,0)、aryD :=nil;

aryS : array[0..10] of byte,静态数组aryS固定长度,不能用setlength改变长度;

全局变量会初始化为0,局部变量不初始化,@aryS为第一个元素的指针;

一维数组,形参类型为array of 作为参数传递时默认会当做值传递const,函数内部会复制一个副本,用Var保留字声明,参数会作为引用传递,类似指针,函数内部对其改变会影响到外部内容;

如果形参类型为自定义动态数组类型如:TDAry: array of byte;则传递时是指针传递,函数内改变会影响到函数外;

如果为自定义静态数组如:TSAry: array[1..10] of byte;则传递时是值传递,是一个备份,var可以传递引用;

多维数组参数传递时与一维类似;