Jer*_*dge 3 delphi pointers casting
我仍然不太了解指针如何在Delphi中工作.在查看我的库时,在我常用的一个函数中GetIPAddress
(用于获取本地机器的IP地址),我遇到了一个使用指针的奇怪演员(下面标出的行).我没有写这个,但发现它在某个地方回来......
uses
Winsock;
function GetIPAddress: string;
type
pu_long = ^u_long;
var
varTWSAData: TWSAData;
varPHostEnt: PHostEnt;
varTInAddr: TInAddr;
namebuf: array [0 .. 255] of ansichar;
begin
try
try
if WSAStartup($101, varTWSAData) <> 0 then Result := ''
else begin
gethostname(namebuf, sizeof(namebuf));
varPHostEnt := gethostbyname(namebuf);
varTInAddr.S_addr := u_long(pu_long(varPHostEnt^.h_addr_list^)^); //<--- ???
Result := WideString(inet_ntoa(varTInAddr));
end;
except
Result := '';
end;
finally
WSACleanup;
end;
end;
Run Code Online (Sandbox Code Playgroud)
指针到底发生了什么?
PHostEnt
是指向a hostent
,Windows API中定义的类型的指针.h_addr_list是一个PAnsiChar值的数组,它实际上是一个字节数组(在C中,char和一个字节是相同的,它使处理字节缓冲区的C API复杂化).
这是说什么: