在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
char
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来设定它的长度。