神祕C語言

對於c語言中指針的操作符有兩個:&和*。對於&,好理解,翻譯的也不錯,就是“取地址”的意思。但對於*,翻譯爲“解引用”,字面意思不好理解,即使看了後面內容才知道不過是“取指針指向的地址的內容”,也仍然是覺得怪怪的,“解引用”這個詞難記也難於從字面直接判斷意思,以致時間長了還是感覺像見了熟悉的陌生人。

翻了好多資料,以及各種網上解釋,大約有點意思了。依我的理解,約摸是這樣:

“引用”這個詞,出現最多的場景就是:在文章或者註腳裏,寫上“引用(或摘自)某某作者某篇文章”,意思很明瞭,就是出現在本文的不是作者自己的話,而是別個作者的話,於是“引用”的意思就是拿過來用。(以下提到”場景“,就是指的這個例子)

       "*"的作用是引用指針指向的變量值,引用其實就是引用該變量的地址,“解”就是把該地址對應的東西解開,解出來,就像打開一個包裹一樣,那就是該變量的值了,所以稱爲“解引用”。也就是說,解引用是返回內存地址中對應的對象。

比如int a=10; int *p=&a;

cout<<*p<<endl; 輸出a的值,就是解引用操作。

       國外資料出現的一詞“reference",應譯爲”參考,參照“,在我們中文技術資料上翻譯爲了”引用“,照上面說的那種場景,倒也可以理解的通。而”dereference“翻譯爲”解除參照“,資料上翻譯爲”解引用“,如果回到上面那種場景,那”解引用“或者”解除參照“就是:我們拿了(引用)別個作者的話,卻沒有註解(解除參照)說這是別人的話,實際上我認爲”去引用化“也許更能表達這個過程或者這個意思。那麼對應到C語言中,指針變量是存儲”其它變量“的地址的,當我們用”*“去操作指針時,我們的意思就是把那個”其它變量“的內容拿過來放在這裏,卻不說明這是別人(在這裏就是指針存儲的變量)的東西,當然這只是類比。過程差不多相似,只要能幫助理解,就阿彌陀佛了。於是”解引用“這樣來理解,貌似好多了。不知道大家懂我說的了沒?

網上查的”dereference“在技術資料上翻譯真是各種多阿,這裏不說了,反正其它翻譯也許更難理解。

翻譯別國資料,用詞真是難,畢竟兩種語言詞彙不一定完完全全的相對應。尤其技術資料,還要講究專業術語,翻譯成中文時,那是真的千挑萬選,才搞出一個像”專業術語“的詞彙來表達。現在國內作者翻譯水平參差不齊,加上對術語的創造,使得翻譯後的中文資料難於閱讀啊。比如上面的”解引用“就是一例。再說個”正則表達式“,從字面意思來看,完全不懂,或許看英文都比我們自己的中文好理解一點。但是純英文看的累,還慢,真是兩難啊。

還可以把“解引用”理解爲“解碼”。假設ptr裏存放的是一個內存地址,那麼*ptr就是這個內存地址裏存放的數據。前面這個“*”的解引用操作,就可以理解爲對這個ptr進行解碼,解碼得到的數據就是*ptr,也就是我們常說的“這個內存地址裏存放的數據”或者“這個指針指向的數據”。“指針”的理解模式太容易混淆,而“解碼”的理解模式更好記一點。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章