日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Addr、@运算符与Pointer类型

發(fā)布時間:2023/12/19 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Addr、@运算符与Pointer类型 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?? ?如果在Delphi IDE中輸入Addr然后按F1的話,幫助文件會告訴你:Addr是個返回值類型為Pointer的函數(shù)。不過我個人更傾向叫它運算符,因為在默認編譯條件下,它的行為和@運算符別無二致。函數(shù)和運算符有哪些區(qū)別和特點,我是如何對它們進行定義的,會在其它文章中講到。

?? ?Delphi中的Pointer類型與C中的void*類型是一模一樣的,它可以與任何類型的指針、對象、類變量進行相互轉換,并且編譯器不會給出任何警告(印象中C++中會要求從void*向其它類型轉換時進行顯式轉換,否則會給出警告)。指針類型的空值是nil,與Pointer(0)或Ptr(0)是完全相同的。在Delphi中,甚至你可以直接把0賦值給任何一個指針,而編譯器僅僅是給你個警告,告訴你已經(jīng)把0變成nil了(在Free Pascal中則會出錯)。直接對Pointer類型的變量進行解引用,得到的“值”的類型是“不定類型(Untyped Type? 這個似乎有點兒黑色幽默,我回頭找找看有沒有確定的翻譯 -_-)”,它不能直接賦值給任何變量(除作為參數(shù)傳遞給要求不定類型的函數(shù),相關知識會在講參數(shù)時詳細介紹)。關于Pointer類型就暫時先介紹這么多了,更加詳細的會放在介紹指針的文章中。

?? ?那么,我現(xiàn)在再強調一下前面介紹的兩個特點:

  • 默認編譯條件下的@運算符,在對任何變量、運行期常量、函數(shù)取地址后,與Addr運算符的結果一樣,返回值的類型為Pointer;
  • Pointer類型的變量,可以與任何指針、對象、類類型變量自由轉換,并且編譯器不會給出任何警告。
  • ?? ?現(xiàn)在,根據(jù)這兩個條件,很容易得到如下推論:當使用Addr運算符、或是默認編譯條件下的@運算符時,我們可以把一個變量的地址賦值給另外一種類型的指針變量。舉例來說,就是:

    var { Global vars }I : Integer;PS : PSingle = @I;PC : PChar = Addr(I);

    ?? ?可以編譯一下上面的代碼,默認編譯參數(shù)下是完全沒問題的。

    ?? ?對于一個初學者來說,可能指針類型對還是比較神秘的。這種“錯誤”的類型轉換可能會給您帶來很大的麻煩,出現(xiàn)意想不到的錯誤,并且很難調試。但如果您和我一樣,眼里全是地址與數(shù)據(jù)沒有類型,類型只是為了在運算的時候規(guī)定編譯器的行為,那么Addr與默認編譯條件下的@運算符的這個特點,卻是Delphi非常方便的一個特性。

    ?? ?如果細心的話,可能您已經(jīng)注意到,在提到@運算符時,我都會在前面加上一個限定詞——默認編譯條件,而在提到Addr時則沒有任何修飾。這就引出了本文的另外一個重要知識點:沒錯兒,可以改變編譯條件,從而使@運算符與Addr運算符表現(xiàn)出不同的行為。
    在IDE中,可以通過Project Options -> Compiler,勾上“Typed @ operator”,或是通過預編譯指令$T+或$TYPEDADDRESS ON,來改變@運算符的行為。這樣設置之后,上面代碼中使用@I行就會出現(xiàn)一個編譯錯誤,提示Single與Integer是不同的類型。
    而Addr運算符的行為則不會改變,這意味著編譯器認為,當你使用Addr時知道自己在做什么。

    ?? ?對于初學者來說,如果對指針類型的使用沒把握的話,建議打開這個選項,可以在一定程度減少出錯的可能性。


    轉載于:https://www.cnblogs.com/egust/archive/2010/08/02/1790342.html

    總結

    以上是生活随笔為你收集整理的Addr、@运算符与Pointer类型的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。