Delphi 这在pascal中是什么意思:const char**pzTail

Delphi 这在pascal中是什么意思:const char**pzTail,delphi,Delphi,我对这个声明有点迷茫: SQLITE_API int SQLITE_STDCALL sqlite3_prepare( const char **pzTail /* OUT: Pointer to unused portion of zSql */ ); 这是否意味着: out pzTail: PansiChar out pzTail: PPansiChar const pzTail: PAnsiChar const pzTail: PPAnsiChar 注意:sqlite3_pr

我对这个声明有点迷茫:

SQLITE_API int SQLITE_STDCALL sqlite3_prepare(
  const char **pzTail     /* OUT: Pointer to unused portion of zSql */
);
这是否意味着:

out pzTail: PansiChar
out pzTail: PPansiChar
const pzTail: PAnsiChar
const pzTail: PPAnsiChar

注意:sqlite3_prepare的doc表示pzTail可以为空

const pzTail:PPAnsiChar
将是最接近和最正确的直译,特别是根据
sqlite3_prepare
文档,由于
pzTail
允许为零


从语义上讲,如果你从未通过nil,那么你应该使用
var pzTail:PAnsiChar
out pzTail:PAnsiChar

const pzTail:PPAnsiChar
将是最接近和最正确的直译,特别是因为
pzTail
被允许为零,根据
sqlite3\u准备
文档


从语义上讲,如果您从未通过nil,那么您应该使用
var pzTail:PAnsiChar
out pzTail:PAnsiChar

我将其声明为
var pzTail:PByte
。谢谢victoria,但这样您将如何通过nul?因为文档上说:“如果pzTail不是空的,那么*pzTail被设置为…”我将声明它为
var pzTail:PByte
。谢谢victoria,但是这样你将如何通过nul?因为文档说:“如果pzTail不是空的,那么*pzTail是为了……”谢谢雷米,我也这么想,所以这意味着System.Sqlite.pas是错误的;(因为他们宣布这是一个例外:PansiChar@loki这不是RTL第一次犯错误,将
var
/
out
用于一个可为零的参数。多年来,他们在许多Win32 API函数中犯了这个错误。感谢remy,我也这么想,所以这意味着System.Sqlite.pas是错误的;(因为他们宣布这是一个例外:PansiChar@loki这不是RTL第一次犯错误,将
var
/
out
用于一个可为零的参数。多年来,他们在许多Win32 API函数中犯了这个错误。