procedure gettDictonry();
var dir:array[0..255] of char;
var sdir:string;
begin
GetWindowsDirectory(dir,255);
sdir:=strpas(dir);
showMessage(sdir);
end;看到上面的代码的问题没有,至少我认为和正规的写法有出入在GetWindowsDirectory这个函数的第一个参数要求是PCAHR类型,为何用dir数组也可以使用呢?
大家知道的请指教下,
var dir:array[0..255] of char;
var sdir:string;
begin
GetWindowsDirectory(dir,255);
sdir:=strpas(dir);
showMessage(sdir);
end;看到上面的代码的问题没有,至少我认为和正规的写法有出入在GetWindowsDirectory这个函数的第一个参数要求是PCAHR类型,为何用dir数组也可以使用呢?
大家知道的请指教下,
P : PChar;
A : array[0..255] of char;procedure TForm1.BitBtn1Click(Sender: TObject);
begin
P := A;
{看一下,是同一个地址}
Showmessage(Format('@A=%p, @A[0]=%p, P=A=%p',[@A, @A[0], Pointer(P)]));
end;但是,如果:var
A: array[5..255] of char;//或array of char
begin
P:= A;//这样就不行了
P : PChar;
A : array[0..255] of char;procedure TForm1.BitBtn1Click(Sender: TObject);
begin
P := A;
Showmessage(Format('@A=%p, @A[0]=%p, P=A=%p',[@A, @A[0], Pointer(P)]));
end;
不追根就底我心理不爽啊
不追根就底我心理不爽啊
你这样理解吧:拿GetWindowsDirectory()来说,这是一个Win32API函数---->它是用C语言写的---->在C里没有字符串的概念---->一般是这样声明:char*一个指针---->其实就是一个字符数组,或者说一个PChar指针。GetWindowsDirectory()的第一个参数是要求是一个指针,而前面说的P、@A、@A[0]、以及A都是指针。至于为什么array[5..255]不行,那是出于安全的考虑,因为只有在Delphi里才可以这样声明数组至于为什么array of char不行,那是因为array of char使用了Write on Copy技术,类似于长字符串string类型,在第一个元素之前有引用计数、长度等信息存储,@A<>@A[0]