2011-01-29 169 views
0

我是一個c#/ java程序員,並沒有真正玩弄指針。我只是想知道這是否足夠用來學習。使用指針的目的是什麼?

有人可以解釋爲什麼,什麼確切的指針將幫助C#/ Java程序員與?

+3

請參閱:http://stackoverflow.com/questions/5727/what-are-the-barriers-to-understanding-pointers-and-what-c​​an-be-done-to-overcome/5754#5754 – 2011-01-29 00:47:29

+0

指針不會幫助Java程序員做任何事情...... – 2011-01-29 00:48:31

回答

3

您已經在使用指針了。 Java中的每個非原始變量(也可能是C#,雖然我不太熟悉它)是指向對象的指針。

也許你想問關於pointer arithmetic的問題?

2

因爲指針可讓您實際手動訪問RAM(在Java中或「安全」C#中不可能),並且它們讓您可以控制事物的分配方式。

C#和Java中「hold」對象的變量實際上是指向內存中對象的指針(也簡稱爲引用),因此爲什麼類稱爲「引用類型」。相比之下,結構是「值類型」,所以結構變量實際上保存着數據本身。指針讓你動態地分配和訪問內存,並且不需要對編譯器部分進行任何安全檢查 - 它們會給你提供一些潛在的性能提升,但是它們讓你檢查你的代碼並確保它的正確性。

其原因有點微妙:您需要指針,因爲要使用內存,您需要知道編譯時需要的內存大小。但是,當然你永遠無法確定用戶不會試圖將100 MB的文件加載到僅用於處理20 MB的程序中,而另一方面卻無法保留這麼多自一開始(想想如果每個人都保留所有資源會發生什麼)。所以你要求操作系統爲你分配一塊內存並給你它的第一個字節的地址,這就是爲什麼需要指針的原因。 (還有指針的其他用途,如內存映射文件和設備,但會使文章更長。)

性能關鍵型應用程序以及充滿bug的應用程序都經常使用指針。 :)

1

我認爲通過理解指針可以更好地理解計算機內真正發生了什麼,發生了什麼以及程序如何實際工作。

如果你不關心它,只想讓你的java程序工作,你可以跳過它們;否則我認爲他們會幫助你完成有關編程的任何事情。