Delphi、PChar和Char数组的比较.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Delphi、PChar和Char数组的比较

Delphi、PChar和Char数组的比较 string和Char数组都是一块内存, 其中存放连续的字符. string保存具体字符的内存对用户 是透明的, 由Delphi管理它的分配, 复制和释放, 用户不能干预(其实也可以, 不过是通过 非法途径). Char数组就不必说了吧? PChar是一个指针, 它的大小只有32位. 定义时由Delphi自动填0. 要将PChar作为字符串 使用的话必须自己分配内存用完必须自己释放. PChar型字符串由#0表示字符串结尾 Delphi所提供的相关PChar字符串的操作都是判断#0来决定字符串的结尾的。 因为PChar是指针,所以它能指向任何地方(也就是说它不一定非要指向字符串不可). 把一个String赋值给PChar只是将String中保存具体字符串的内存的地址给 PChar 变量. 当然也可以把Char数组第一个元素的地址给PChar. 至于 哪个占用内存小, Char数组<PChar(指分配过字符串的)<string(除了具体字符串外 还 包含字符串长度) 如果空字符串那么PChar<String<array [0..n] of Char 从速度来说毫无疑问string最慢, 例如: 作为参数传递(非var调用时)给过程时string将整个字串的副本传递过去, PChar将指针 本身的副本传递过去(32位), Char数组和PChar一样, 传递的是第一个元素的地址副本. 不过就灵活性来说string最高, 而且Delphi支持的函数最多. 另外可以将String作为 Buffer使用(因为它当中可以包含字符0). amo (2000-9-20 1:35:26) ---------------------------------------------------------------------------------- 在Delphi2.0以后的版本中, string分两种, 一种是与Pascal传统string相兼容,叫ShortString, 它的存储结构如下: +---------------------+ | 1Byte | 字符串内容 | +---------------------+ 0 1 ...... 其中第一个字节为字符串的长度。 所以ShortString所能包括的字符串长度不能大于255。 另一种是叫长字符串AnsiString, 它就是一个指向字符串的指针,不过具体的存储有些特别。 它的存储结构如下: +-----------------------+ | 4B | 4B | 字符串内容 | +-----------------------+ -8 -4 0 ...... 其中,AnsiString指向字符串第一个字符, 在第一个字符的反方向第1到第4的4个字节表示字符串长度,第5到第8的4个字节表字符串被引用的次数。 pchar就是纯指向字符串(#0字符结尾)的指针,与C语言中的char *是一样的。 char数组也是指向字符串的指针,它与pchar的区别在于: 1.char数组(均指非动态数组)一旦定义好,它的长度就固定了; 2.char数组的地址是常量,不能另赋其它值,不能象pchar一样, 如: sPchar:pchar; sArray1,sArray2:array[0..80]of char; sPChar:=sArray2; sPChar;=sArray1; 但不能sArray2:=sArray1; char数组就相当于const char * 要说速度最快当然是纯指针操作的pchar与char数组最快啦 所谓占内存最少,效率更高, 不知老兄你想进行什么方面的应用, 一般对string,pchar或char数组,不用考虑这些。 对编程而言,如果在Delphi或C++Builder中使用,可尽量使用 AnsiString, Borland公司对它已经进行了非常完美的内部处理, 使用非常方便。 如果涉及到Windows API或混合编程等,接口部分一般使用pchar。 char数组使用的比较少了,因为多数可以用char数组的地方, 现在比较流行的作法是定义一个ansistring, 再用setlength来设定它的长度。 lycwg (2001-1-12 11:53:20) ---------------------------

文档评论(0)

f8r9t5c + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档