函数调用中参数前的 @ 在 Pascal 中意味着什么

What does @ before a parameter in a function call means in Pascal

我无意中发现了多个 Pascal 代码示例(FPC 编译器模式),其中有时在 function/procedure 调用的参数名称之前使用“@”符号,但我找不到什么这表示。有时我什至看到它与尚未声明的变量一起使用。例如:

procedure displayImage ( var window , image : PSDL_SURFACE );
    var destination_rect : TSDL_RECT ;
BEGIN
    {Setting of the x,y,w and h parameters of the destination_rect variable}
    SDL_BlitSurface (image , NIL , window , @destination_rect);
    SDL_Flip (window)
END;

SDL_PollEvent (@event); //The event variable hasn't been declared or initialized prior to this, yet this seems to work
if event.type_ = SDL_MOUSEBUTTONDOWN then
    {Do stuff}
if event.type_ = SDL_QUITEV then
    {Quit program}

我想这可能是 SDL 的一个怪癖,因为每次我遇到它都是在 SDL 相关函数中,但我找不到任何关于它的信息。

在像 Pascals 这样的 Borland 中,@ 是寻址运算符,类似于 C/C++ 中的 &。

此外,自己的 Free Pascal 方言(fpc 和 objfpc)在 TP/Delphi 中您可以传递 function/method

的地方需要 @

这是为了消除 function/method returns 具有相同签名的 procedure/method 类型的极端情况的歧义。

它是 objfpc 模式中的一个东西,它会损害兼容性并且不会增加太多(因为它只解决了一个非常人为的极端情况),这就是为什么我尽可能避免这些模式,并使用 {$模式 delphi} 尽可能多。