PChar、String、ShortString、AnsiString、WideString的区别?(100分)

L

lccc

Unregistered / Unconfirmed
GUEST, unregistred user!
刚有个同事问我几个问题,回答的连我都不满意,特请教一下高手:
1、PChar、String、ShortString、AnsiString、WideString的区别?
哪些是可以用于汉字字符串的?我在自己的程序中一般都用String好象也没错。
2、“以空字符结尾”是什么意思?NIL、NULL?
3、"Program terminated"#0、"Program terminated"、"Program terminated"+#0、
"Program terminated"+Null、"Program terminated"+Nil哪些是正确的?
各有什么区别?
 
干脆你自己查帮助了,懒得帮你打字了
 
在《Delphi 5 开发人员指南》的第24至32页,说的很清楚,请自行查一下,
这本书实在太好了,我建议你买一本吧,不过太贵了138元。
 
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).
 
“#0”相当于C语言中的“/0”,表示字符串的结束。在调用API时常用。因为 许多API函数
支持Char而不支持String。
不知对否,仅供参考。
 
谢谢各位!
 

Similar threads

回复
0
查看
665
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
530
import
I
I
回复
0
查看
394
import
I
顶部