各種語言中對指標的叫法

出版圈郭志敏發表於2013-01-18

如果沒有指標,就無法構造正統的資料結構, 因此,比較成熟的、正統的程式語言,必定會存在指標3

3以前, FORTRAN 、 COBOL 和BASIC 中 都沒有指標,但是在 fortran90、Visual Basic 等升級版中,正式引入 了指標功能。

咦?我怎麼聽說Java 就沒有指標呢……

我可以負責任地告訴你,這是個謠言。

第4 章的補充內容中也曾經提到,Java 只能通過指標來運算元組和對 象,因此,Java 比C 更離不開指標。

在早期的Java 白皮書中,就有“Java 中沒有指標”這樣的說法4。Java 中被稱為“引用”的概念,在C 和Pascal 的程式設計師看來,怎麼看都相當於 指標。我認為在“Java 中沒有指標”這個觀點的背後,瀰漫著下面這樣“狡 猾的”市場營銷的氣味,
4請參照http://java.sun. com/docs/overviews/ java/java-overview-1. html。

因為對於C 語言,大家都認為“指標比較難”,如果強調“沒 有指標”,程式設計新手也許更容易接受。

但是Java 的引用又和C 的指標有著很大的不同。Java 沒有指標運算, 因此不存在指標運算和陣列之間的那種微妙關係,此外你也不能取得指向 變數的指標。如果你認為這些差別能成為“Java 中沒有指標”的理由,那 麼Pascal 是不是也沒有指標呢?

除Java 之外,Lisp、Smalltalk 和Perl(Ver.5 以後)中相當於指標的對 象也被稱為“引用”,但是也有人會使用“指標”這樣的叫法。也就是說, 這些語言並沒有嚴格地將“引用”和“指標”分開。因為它們的本質相同, 所以Java 故意強調“沒有指標”,反而讓人覺得奇怪5

5誕生在日本的面向對 象的指令碼語言Ruby, 作者在自己的著作中 就斷言“Ruby 中沒有 指標這樣的概念”,其 實Ruby 中也有叫做 “引用”的指標。

Ruby 中連字串這樣的基本型別也不是不可變的,像這樣的語言“沒 有指標”,是不是很危險?

Pascal、Modula2/3 和C 一樣,都稱之為指標。

Ada 中的名稱為“Access 型別”。這種叫法有點人讓人摸不著頭腦。

悲哀的是,C++在語法上將“指標”和“引用”區別成兩個不同的概念。

C++的“指標”和C、Pascal 的“指標”,以及Java 的“引用”同義。 其次,C++中的“引用”是指本來應該被稱為“別名”(alias)的物件,正因為是別名,所以一旦確定“別名是什麼”,就再也不能修改了。

實際上,C++的術語“引用”也是通過指標實現的,所以它其實是一個 重複的功能。很多熟練的C++程式設計師往往不使用“引用”,而總是使用指標。 但是,在某些運算子過載,以及複製建構函式的場景下,可能會不得不使 用“引用”。對於C++,有人說它太深奧,有人說使用它開發專案成本太高, 甚至有人質疑“是否存在理解C++全貌的人”……總之,C++也是一門讓人 糾結的開發語言。

相關文章