谁能详细能俗的说明一下
谁能详细能俗的说明一下string和array of char,pchar和pstring的区别及具体使用上的区别?哪种情况下能用哪种情况下不能用。
[解决办法]
shortstring:与传统的Pascal字符串相对应,存储格式为压缩格式,字符个数有限,最大
为255个
ansistring(string缺省编译状态下):存储格式为压缩格式,一个字符串的个数和大(最大
长度可以到2GB)。字符串中的字符也基于标准的ANSIChar字符类型
WideString:与AnsiString类似,不过是基于WideChar字符类型(UniCode字符集),用了
存储Unicode字符。引入这种类型,主要是为了支持OLE编程
至于string和Pchar的区别就多了
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).
PAnsiString = ^AnsiString;
PString = PAnsiString;