2011-01-29 54 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程序工作,你可以跳过它们;否则我认为他们会帮助你完成有关编程的任何事情。