默认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可以传递引用;
多维数组参数传递时与一维类似;
 
 
 
 

delphi中String 和 动态静态数组的更多相关文章

  1. Delphi中String类型原理介绍

    Delphi中字符串的操作很简单,但幕后情况却相当复杂.Pascal传统的字符串操作方法与Windows不同,Windows吸取了C语言的字符串操作方法.32位Delphi中增加了长字符串类型,该类型 ...

  2. 099、Java中String类之字符数组与字符串的转换

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...

  3. C++中关于[]静态数组和new分配的动态数组的区别分析

    这篇文章主要介绍了C++中关于[]静态数组和new分配的动态数组的区别分析,很重要的概念,需要的朋友可以参考下 本文以实例分析了C++语言中关于[]静态数组和new分配的动态数组的区别,可以帮助大家加 ...

  4. DelphiXe 中静态数组TByteArray和动态数组TBytes /array of byte 的区别

    在应用中发现静态数组和动态数组是有区别的: procedure TForm1.Button1Click(Sender: TObject);var  RsltStream: TMemoryStream; ...

  5. delphi 静态3维数组。 严重占用堆栈 切记。 应该用动态数组, 非要用静态数组的话, 要在编译器里 把 堆栈 调大

    delphi 代码正确, 但是运行就崩溃. 原因为 定义了  一些   静态3维数组. 应该扩大 软件的 堆栈 设置.    然后正常解决问题 静态3维数组.   严重占用堆栈   切记. 应该用动态 ...

  6. Delphi DLL的创建、静态及动态调用

    转载:http://blog.csdn.net/welcome000yy/article/details/7905463 结合这篇博客:http://www.cnblogs.com/xumenger/ ...

  7. [转]Delphi DLL的创建、静态 以及动态调用

    第一章  DLL简单介绍 由于在目前的学习工作中,需要用到DLL文件,就学习了下,在这里作个总结. 首先装简单介绍下DLL: 1,减小可执行文件的大小 DLL技术的产生有很大一部分原因是为了减小可执行 ...

  8. 20140321 sizeof 虚函数与虚函数表 静态数组空间 动态数组空间 位字段

    1.静态的数组空间char a[10];sizeof 不能用于1:函数类型 2:动态的数组空间new3:位字段 函数类型:int fun();sizeof(fun())计算的是返回类型的大小,并不是函 ...

  9. [付费视频]Delphi视频Android开发使用静态库(A)和动态库(SO)

    关于本视频:前阵子接到一个委托,解决Delphi开发Android程序中串口通信的问题,厂家那边提供了c文件,需要翻译成delphi可用,翻译倒是比较简单.不过后来翻译读写ic卡单元的时候进行不下去了 ...

随机推荐

  1. poj1860--Currency Exchange

    Bellman-ford算法的反向应用--正循环检查 /** \brief poj 1860 Bellman-Ford * * \param date 2014/7/24 * \param state ...

  2. Atitit.prototype-base class-based  基于“类” vs 基于“原型”

    Atitit.prototype-base class-based  基于“类” vs 基于“原型” 1. 基于“类” vs 基于“原型”1 2.  对象的产生有两种基本方式.一种是以原型(proto ...

  3. 单双口RAM

    // Quartus II Verilog Template// Simple Dual Port RAM with separate read/write addresses and// singl ...

  4. 【持续更新】总结:C++开发时积累的一些零碎的东西

    Makefile template update: 1.调整了顺序,把经常编辑的部分集中在了Makefile的下半部分 2.进行了一些重构实现更多的代码复用,见红色高亮部分,LIBPATH_ALL和L ...

  5. NGUI3.7.4实现循环拖动

    前段时间下了NGUI新版本3.7.4,看到例子Endless Scroll Views,实现了循环拖动,可能会用到,先把实现步骤贴出来跟大家分享一下. 1.首先新建一个背景. 2.添加所需控件,类似滑 ...

  6. FastDFS 常见问题

    FastDFS 常见问题 Q:/fdfs_trackerd: error while loading shared libraries: libevent-1.4.so.2: cannot open ...

  7. Nginx中修改php.ini的上传设置upload_max_filesize的值

    普遍的网络越来越快,以前小家子气的2M上传限制慢慢变得不合时宜了.最近就把2M的限制直接提升到了20M...代码层面很快就修改好了,没什么可说的.但是上线的话还得修改一下服务器的配置.服务器是Ngin ...

  8. 下一个时代,对话即平台 —— 开始使用Bot Framework和Cognitive Service来打造你的智能对话服务

    在16年3月30号微软的全球开发者大会Build上发布了Bot Framework,微软认为下一个big thing是Conversation as a Platform,简称CaaP,中文应该叫做& ...

  9. 使用AccessibilityService实现微信自己主动抢红包

    近期要实现微信自己主动抢红包的功能.使用AccessibilityService来开发,这里主要写一下逻辑以及注意点. 注意点 1.搜索keyword 我们实现某个功能比方点击等须要找到相应的对象然后 ...

  10. 在linux下安装配置rabbitMQ详细教程

    在linux下安装配置rabbitMQ详细教程 2017年12月20日 17:34:47 阅读数:7539 安装Erlang 由于RabbitMQ依赖Erlang, 所以需要先安装Erlang. Er ...