亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

“指針”是成熟的編程語言必須具有的概念嗎?

“指針”是成熟的編程語言必須具有的概念嗎?

拉風的咖菲貓 2019-04-19 16:29:40
我在看一個日本人寫的書《征服C指針》,書上的引言提到這么一句話確實,“C指針”有著底層而邪惡的一面,但是,它又是構造鏈表和樹等“數據結構”不可缺少的概念。如果沒有指針,我們是做不出像樣的應用程序的。所以,凡是真正成熟的開發語言,必定會存在指針,如Pascal、Delphi、Lisp和Smalltalk等,就連VisualBasic也存在指針。早期的Perl因為沒有指針而飽受批評,從版本5開始也引入了指針的概念。當然,Java也是有指針的。很遺憾,世上好像對此還存有根深蒂固的誤解。在本書中,我們將體驗如何將指針真正地用于構造數據結構?!爸羔槨笔浅墒斓木幊陶Z言必須具有的概念。它上面提到的這些語言我都沒有學過,但是根據我學過的JavaScript,Python和Ruby,它們都是沒有指針的啊,這是怎么回事呢?難道是作者錯了,還是我理解有問題呢?
查看完整描述

2 回答

?
慕姐8265434

TA貢獻1813條經驗 獲得超2個贊

指針的本意是:在一個變量中保存另一個變量的地址,以提供將“地址”變量化的能力。如果沒有指針,將無法用一個變量引用另一個變量(只能把變量的值拷貝一份賦給另一個變量)。
C語言中提供了完善的指針操作,包括為指針賦值、內存分配(malloc)、取變量地址、讓指針可以參與運算等,這使得C程序員能夠任意操作可用內存。
Java(Javascript)中也有指針,只不過與C相比,Java對程序員使用指針有著嚴格的限制,僅允許賦值操作,而且不是任意值,只能是通過new創建的對象引用或其他引用變量的值。不過Java一般不說指針,而是用引用(reference)來稱呼指向對象的指針,不過,Java中仍然可以找到一些指針存在的影子,例如,當一個對象為null時調用方法會導致nullpointer異常,即所謂的空指針錯誤,可見Java內部使用的確實是指針。
很多基本的數據結構,例如鏈表、樹、圖等,都必須用指針來保存前驅或后繼節點的地址,否則這些數據結構無法實現。
如果一個語言不提供指針,雖然在理論上它也具備完整的計算能力,但很多在其他語言中非常簡單的問題都將變得極其復雜(本來想舉個例子的,但一時想不起了,不過這個結論肯定是正確的)。
所以這個作者說的是對的,只是你需要理解指針的本質,不要錯誤地認為只有像C語言那樣的指針才叫指針,真正的指針的概念請看我開頭的那句。
                            
查看完整回答
反對 回復 2019-04-19
?
海綿寶寶撒

TA貢獻1809條經驗 獲得超8個贊

沒看過那個作者的書但java里面叫引用和指針還是有區別的并不能直接操縱內存個人理解指針的存在是為了獲得運行時的效率和底層訪問的能力然而對于一個成熟的編程語言這兩個在現在看來并不是必須的特性而開發效率解決特定問題的能力等也是重要的考量貌似作者就是非常毒舌的風格
                            
查看完整回答
反對 回復 2019-04-19
  • 2 回答
  • 0 關注
  • 555 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號