procedure Move( const Source; var Dest; count : Integer );
var
S, D: PChar;
I: Integer;
begin
S := PChar(@Source);//取内存地址
D := PChar(@Dest);//取内存地址
if S = D then Exit;
if Cardinal(D) > Cardinal(S) then
for I := count-1 downto 0 do
D[I] := S[I]
else
for I := 0 to count-1 do
D[I] := S[I];
end;请问在这个函数中S := PChar(@Source);中的PChar是什么作用?
var
S, D: PChar;
I: Integer;
begin
S := PChar(@Source);//取内存地址
D := PChar(@Dest);//取内存地址
if S = D then Exit;
if Cardinal(D) > Cardinal(S) then
for I := count-1 downto 0 do
D[I] := S[I]
else
for I := 0 to count-1 do
D[I] := S[I];
end;请问在这个函数中S := PChar(@Source);中的PChar是什么作用?
然后下面就是将S(Source)指针所指向的数据拷贝到D(Dest),长度为Count
您可以把一种类型的数值强制转换成另一种类型的数值,语法如下:
类型标识符(表达式)
数值的类型强制转换首先要指定一个类型标识符,然后把要转换的表达式用()括起来,例如:
Integer('A')
Char(48)
分别把字符A转换成一个整数,把一个整数48转换成字符。
Object Pascal规定,类型标识符和括号内的表达式要么同时是有序类型,要么同时是指针类型。
⒉变量的类型强制转换
您也可以把一种类型的变量强制转换成另一种类型的变量,包括过程类型的变量,语法如下
类型标识符(变量引用)
变量的类型强制转换是针对变量引用而言的,Object Pascal规定,要转换的变量类型的长度必须与目
标类型的长度一一致,如果不一致将引起异常。如果类型强制转换是通过As操作符进行的,As操作符能在转换前先进行是否赋值兼容的检查。如果是通
过类型标识符进行类型强制转换 ,则不进行检查。示例:
Type Func=Function (X:Integer):integer;
Var
F:Func;
P:Pointer; F:=Func(P);
{把指针类型的变量P转换成func类型的变量F}
Func(P):=F;
{首先把指针的变量P转换成Func类型,然后把一个func类型的值赋给转换后的变量P。}
把什么强制转换为PCHAR类型,变量S吗? 这个转换对S是有影响,还是没有影响,是在S后面加上一个#0吗?
Delphi所提供的相关PChar字符串的操作都是判断#0来决定字符串的结尾的。
因为PChar是指针,所以它能指向任何地方(也就是说它不一定非要指向字符串不可).
S := PChar(@Source),是取Source的地址,作为一个PChar赋值给S