回答
指針是間接的:不是使用數據本身,而是使用指向數據的(某物)。根據語言的語義,這允許很多事情:便宜地切換到另一個數據實例(通過將指針設置爲指向另一個實例),通過指針允許訪問原始數據,而不必製作(可能是昂貴的)副本等
內存分配與指針有關,但是分開:你可以有指針而不分配內存。你需要內存分配指針的原因是分配的內存塊的實際地址在編譯時並不知道,所以你只能通過間接級別訪問它(即指針) - 編譯器靜態分配空間給指針將指向動態分配的內存。
指針(或虛擬機/機器上的等價物)需要*具有[通過共享呼叫](http://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_sharing),如果您相信易變性,它是*必須*在大多數「OO」語言中。也就是說,傳遞的數據並不僅僅是昂貴的:副本就是副本。 – 2012-04-16 05:35:13
指針非常強大。僅僅因爲現在計算機的處理時間更快,並不意味着放棄像指針這樣重要的東西是任何理由。在堆棧上傳輸大塊內存的效率最差,最糟糕的是災難性的。使用指針,您只需要維護對數據所在位置的引用,而不是在每次調用函數時都複製大量的內存。
此外,如果您每次都複製所有數據,您如何修改原始數據?除了在每次接觸它的調用中返回結構的副本。
我記得在Dijkstra正在評估一個學生編程課程的地方讀書;這個學生很聰明,但他/他無法解決問題,因爲有一種心理障礙。
所有的代碼是有點兒好,但現在需要的是簡單地使用表達式
a[a[i+1]] = j;
即使如此接近的解決方案仍然是目標似乎很遠。
語言「無指針」已經存在......例如, BASIC。沒有顯式指針,也就是說。但是,這種間接的想法......可以讓數據意味着在哪裏尋找其他數據的想法對編程至關重要。
數組的想法是關於能夠使用計算值來查找其他值。
試圖隱藏這個想法是一個可怕的計劃。根據迪克斯特拉的觀點,任何接觸過BASIC語言的人都已經接受過這樣的精神傷害,這種傷害不可能像一個好的程序員那樣恢復(可能缺乏明確的間接性是其中一個問題)。
我覺得他很誇張。
只是有點。
我想我受到你提到的那個「心理障礙」的困擾。編程中有一些概念,我不能「得到它」。指針,數組,布爾值提到幾個 – user1325414 2012-04-16 06:00:03
陣列概念可能是最重要的代謝首先,所以我建議與他們玩很多。我很幸運,因爲我的第一個編程語言是彙編程序,並且我可以獲得的所有內容都是65536個元素。指針和數組索引在哲學層面上沒有什麼不同。關於布爾值,真的沒什麼可以理解的,它只是單個信息的一種可能的解釋。要麼做或不要。是或否。白色或黑色。對或錯。零或一個。 – 6502 2012-04-16 06:25:04
- 1. 在NS2中可以做什麼以及不能做什麼?
- 2. 如何實現可以用void實例化的智能指針?
- 3. 我不能用keytool做什麼,我可以用OpenSSL做什麼?
- 4. 是否可以描述一個不可能實現的功能?
- 5. 爲什麼指向返回引用的指針不可能?
- 6. 爲什麼不能接口指針接收器來實現
- 7. 小蘋果可以做什麼和不能做
- 8. 表格可以做CSS定位不能做什麼?
- 9. Komodo Macro可以做什麼,如果可以,我該怎麼做?
- 10. 爲什麼指向List的指針也可以指向Node?
- 11. VPS可以做什麼?
- 12. webkit可以做什麼?
- 13. Merlin Agent可以做什麼?
- 14. FormCreate()中可能做什麼和不做什麼?
- 15. 你可以用Hadoop做什麼是不可能的,或者很難做到Hive?
- 16. 爲什麼解組指針變量不可能?
- 17. C++:爲什麼這個智能動態指針不可用?
- 18. 不可能:該指針作爲默認參數。爲什麼?
- 19. 什麼Flash可以做HTML5不?
- 20. C++:實現智能指針
- 21. 什麼是MD5CryptoServiceProvider,它可以做什麼?
- 22. 你可以用grep來做什麼,你可以用egrep做什麼?
- 23. 有人可以告訴我我可能會做錯什麼
- 24. static_cast是否可以將非空指針變成空指針?
- 25. 是否有可能在Android中使用指針實現鼠標驅動程序?
- 26. 什麼__contains__做什麼,可以調用__contains__功能
- 27. 是否可以在Java中實現XOR LinkedList(具有單指針的DLL)
- 28. 我做了什麼?指向指向double的指針的指針?
- 29. 什麼是Perl中,可以實現帕羅代理功能
- 30. 使用Installshield可以實現什麼功能
它的種類取決於語言。用C++,基本上沒有。指針在該語言中非常重要。 Java也是一樣(有點)。另外,一些C庫會大量使用它們(如Glib)。 – Hassan 2012-04-16 05:25:56