2012-04-16 48 views
1

所以我很難掌握指針和所有內存分配背後的想法。指針可以做什麼,否則不可能實現?

我現在的計算機和現在一樣強大,他們現在爲什麼我們必須使用指針?

在沒有指針的幫助下,是否總是有一種解決方法來執行操作?

+0

它的種類取決於語言。用C++,基本上沒有。指針在該語言中非常重要。 Java也是一樣(有點)。另外,一些C庫會大量使用它們(如Glib)。 – Hassan 2012-04-16 05:25:56

回答

1

指針是間接的:不是使用數據本身,而是使用指向數據的(某物)。根據語言的語義,這允許很多事情:便宜地切換到另一個數據實例(通過將指針設置爲指向另一個實例),通過指針允許訪問原始數據,而不必製作(可能是昂貴的)副本等

內存分配與指針有關,但是分開:你可以有指針而不分配內存。你需要內存分配指針的原因是分配的內存塊的實際地址在編譯時並不知道,所以你只能通過間接級別訪問它(即指針) - 編譯器靜態分配空間給指針將指向動態分配的內存。

+1

指針(或虛擬機/機器上的等價物)需要*具有[通過共享呼叫](http://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_sharing),如果您相信易變性,它是*必須*在大多數「OO」語言中。也就是說,傳遞的數據並不僅僅是昂貴的:副本就是副本。 – 2012-04-16 05:35:13

1

指針非常強大。僅僅因爲現在計算機的處理時間更快,並不意味着放棄像指針這樣重要的東西是任何理由。在堆棧上傳輸大塊內存的效率最差,最糟糕的是災難性的。使用指針,您只需要維護對數據所在位置的引用,而不是在每次調用函數時都複製大量的內存。

此外,如果您每次都複製所有數據,您如何修改原始數據?除了在每次接觸它的調用中返回結構的副本。

0

我記得在Dijkstra正在評估一個學生編程課程的地方讀書;這個學生很聰明,但他/他無法解決問題,因爲有一種心理障礙。

所有的代碼是有點兒好,但現在需要的是簡單地使用表達式

a[a[i+1]] = j; 

即使如此接近的解決方案仍然是目標似乎很遠。

語言「無指針」已經存在......例如, BASIC。沒有顯式指針,也就是說。但是,這種間接的想法......可以讓數據意味着在哪裏尋找其他數據的想法對編程至關重要。

數組的想法是關於能夠使用計算值來查找其他值。

試圖隱藏這個想法是一個可怕的計劃。根據迪克斯特拉的觀點,任何接觸過BASIC語言的人都已經接受過這樣的精神傷害,這種傷害不可能像一個好的程序員那樣恢復(可能缺乏明確的間接性是其中一個問題)。

我覺得他很誇張。

只是有點。

+0

我想我受到你提到的那個「心理障礙」的困擾。編程中有一些概念,我不能「得到它」。指針,數組,布爾值提到幾個 – user1325414 2012-04-16 06:00:03

+0

陣列概念可能是最重要的代謝首先,所以我建議與他們玩很多。我很幸運,因爲我的第一個編程語言是彙編程序,並且我可以獲得的所有內容都是65536個元素。指針和數組索引在哲學層面上沒有什麼不同。關於布爾值,真的沒什麼可以理解的,它只是單個信息的一種可能的解釋。要麼做或不要。是或否。白色或黑色。對或錯。零或一個。 – 6502 2012-04-16 06:25:04

相關問題