• 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可以传递引用;
    多维数组参数传递时与一维类似;
     
     
     
     
  • 相关阅读:
    <转>反调试技巧总结原理和实现
    MFC CListCtrl 表格
    <转>汇编指令
    c++ builder 简单读、分析网页数据
    <转>CProcessData : A template class to ease up SendMessage calls across processes
    <转>Running console applications silently
    遍历电脑打印机、设置默认打印机、EnumPrinters ,SetDefaultPrinter,GetDefaultPrinter
    <转>运算符巧妙原理解析
    遍历 进程
    Enterprise Library5.0 Unity 试用.
  • 原文地址:https://www.cnblogs.com/hejoy91/p/3620436.html
Copyright © 2020-2023  润新知