您的位置:首页 > 其它

PChar、PWideChar 基础知识

2010-11-10 13:01 218 查看
PChar 和 PWideChar类型兼容于从索引下标0开始的静态字符数组,即可以将索引下标从0开始的静态字符数组赋给PChar 和 PWideChar类型的指针变量。此过程不可逆,即不能将PChar和PWideChar类型的指针变量赋给索引下标从0开始的静态数组。

String 和 PChar 类型混用时,注意:

1.Pascal长字符串赋值兼容PChar类型,所以可以将PChar类型字符串直接赋给string类型的变量.

P1 : PChar;

S1 : String;

P1 := 'June';

S1 := P1;

2:不能将string类型的变量赋给PChar类型的变量,此时必须进行强制类型转换。PChar(S)

S1 := 'June';

P1 := PChar(S1);

3.PChar类型和String类型可以在双目运算表达式中混合使用。此时如果一个运算对象为String类型,一个PChar类型,则编译器自动将PChar转换为对应长字符串类型,表达式的运算结果为长字符串类型。

4.如果子程序或对象的方法以长字符串为参数,则调用时的参数可以为PChar类型,此时Delphi会自动进行强制类型转换。

//

当一个长字符串类型转换成PChar类型时应注意的问题:

1.如果S为长字符串类型的表达式,PChar(S)将把S转换为以null结尾的字符串,PChar(S)为指向S中第一个字符的指针。

2.如果S为长字符串类型的表达式,可以使用Pointer(S)将S转换为无类型指针。此时如果S为空串,转换结果为null。

3.当长字符串类型的变量S转换为PChar类型的字符指针时,字符指针仅在S没有重新赋值或没有越过作用域时有效。

S1 := 'June';

P1:= PChar(S1); //P1->S1-June

S1 := 'XYZ'; // P1->June

S2 := P1; //P1->June

4.当将长字符串类型的表达式转换为PChar指针类型时,在一般情况下该指针都是只读的,一般不能使用指针修改字符串的内容。如果同时满足下列条件可以安全的使用指针修改长字符串的内容:

--类型转换的对象是长字符串类型的变量

--字符串不是空串

--字符串为唯一的,即其引用记数为1(要保证字符串为唯一的,可以使用SetLength/SetString/UniqueString过程)

--自从进行类型转换后字符串没有被修改过

--所有修改的字符串都位于字符串内部,即字符指针的索引没有越界

S1 := 'June';

P1:= PChar(S1);

P1^ := 'j'; //S1-june

Inc(P1);

P1^ := 'U';//S1-jUne

内容均摘抄自《参透delphi》 乔林著
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐