下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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]ofChar
从速度来说毫无疑问string最慢,例如:作为参数传递(非var调用时)给过程时string将整个字串的副本传递过去,PChar将指针本身的副本传递过去(32位),Char数组和PChar一样,传递的是第一个元素的地址副本.
不过就灵活性来说string最高,而且Delphi支持的函数最多.另外可以将String作为
Buffer使用(因为它当中可以包含字符0).在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]ofchar;
sPChar:=sArray2;sPChar;=sArray1;
但不能sArray2:=sArray1;
char数组就相当于constchar*要说速度最快当然是纯指针操作的pchar与char数组最快啦
所谓占内存最少,效率更高,
不知老兄你想进行什么方面的应用,
一般对string,pchar或char数组,不用考虑这些。对编程而言,如果在Delphi或C++Builder中使用,可尽量使用AnsiString,
Borland公司对它已经进行了非常完美的内部处理,
使用非常方便。
如果涉及到WindowsAPI或混合编程等,接口部分一般使用pchar。char数组使用的比较少了,因为多数可以用char数组的地方,
现在比较流行的作法是定义一个ansistring,再用setlength来设定它的长度。lycwg(2001-1-1211:53:20)
------------------------------------------------------------
三、字符串string字符数组与指向字
符串的指针pchar的区别与联系
这3者的基本概念相同,但有一些非常细微的差别,在编程时稍不注意就会出错,需高度重视。
1、使用指向字符串的指针,如果不是以0结尾,运行时就会出现错误。为了避免这种错误,需要在字符串结尾人工加入0即char(0),或用strpcopy函数在字符串结尾自动加0。
例1:指向字符串的指针,如果不是以0结尾,运行时会出现错误:
{s[0]=3s[1]='n's[2]='e's[3]='w'}
var
s:string;
p:pchar;
begin
s:='new';
label1.caption:=s;{new}
label2.caption:=intTostr(integer(s[0]));{3是字符串的长度}
p:=@s[1];{不是以0结尾,莫用pchar型指针}
label3.caption:=strpas(p);{运行时出现错误}
end;例2:在字符串结尾人工加入0即char(0),可使用指向字符串的指针。
{s[0]=4s[1]='n's[2]='e's[3]='w's[4]=0;}
{p-->'new'}
var
s:string;
p:pchar;
begin
p:=@s[1];
s:='new'+char(0);{以0结尾,可用pchar型指针}
label1.caption:=strpas(p);{new}注意:procedure
GetM
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 角度尺测量脊椎活动度刻度设计规范
- 2025重庆綦新智能建造科技有限公司面向区属国有企业遴选员工2人笔试历年参考题库附带答案详解
- 2025重庆成飞新材料股份公司招聘7人笔试历年参考题库附带答案详解
- 2025重庆两江假日酒店管理有限公司招聘12人笔试历年参考题库附带答案详解
- 2025辽宁营口市西源开发建设有限公司市场化选聘经营管理人员2人笔试历年参考题库附带答案详解
- 2025辽宁沈阳汽车集团有限公司招聘1人笔试历年参考题库附带答案详解
- 2025贵州茅台和义兴酒业分公司招聘200人笔试历年参考题库附带答案详解
- 2025西藏拉萨当雄县富民国有矿业有限公司旗下子公司招聘人员1人笔试历年参考题库附带答案详解
- 2025秋季河南销售分公司高校毕业生招聘15人笔试历年参考题库附带答案详解
- 2025福建莆田市湄洲湾北岸经济开发区国发投资有限公司招聘2人笔试历年参考题库附带答案详解
- 江苏无锡市2025-2026学年高二下学期期末考试化学试题含答案
- 2026中铁装配式建筑科技有限公司招聘65人笔试历年典型考点题库附带答案详解
- 2025工贸企业董事长安全生产责任制培训
- 火力发电厂典型事故案例汇编
- 保证药品信息来源合法、真实、安全的管理措施、情况说明及相关证明资料
- 2026年湖南事业单位招聘(公基)笔试真题及答案
- 关键岗位考核制度细则
- 福建省厅警用地理信息系统(PGIS2.0)建设方案V1.1
- 华为公司质量管理
- 2025四川遂宁发展投资集团有限公司招聘8人笔试参考题库附答案
- 主网线路专业知识培训课件
评论
0/150
提交评论