C指针在其他语言中等效

时间:2013-08-15 16:13:26

标签: php javascript python c pointers

作为CS的本科生,我从C开始,其中指针是一种重要的数据类型。之后我谈到了Java,JavaScript,PHP,Python。它们本身都没有指针。

为什么?他们的语言中是否有类似指针的等价物,或者指针的功能不再重要了?

我粗略有一些想法,但我很乐意听到更多有经验的程序员的意见。

3 个答案:

答案 0 :(得分:5)

为什么?

一般来说,指针被认为太危险,因此现代语言试图避免直接使用它们。

他们的语言中是否有类似指针的等价物,或者指针的功能不再重要了?

功能非常重要。但为了使它们不那么危险,指针已被抽象为不太恶毒的类型,例如引用。

基本上,这归结为更强的打字和缺乏指针算法。

答案 1 :(得分:1)

大多数面向对象的语言将对象实现为C指针,但它们是抽象的,您无法更改它的值。所以当你使用这个/ self时,它确实是大多数情况下的指针(某些语言可能有一个对象表,可以更快地进行垃圾回收和其他优化)。

例如在Java中,当您执行以下操作时:

Object t = new A();
t = new B();

您正在将指针交换到场景后面。有些语言重新引入像Go这样的指针概念,但你不能用它算术。

所以在某种程度上:没有指针没有从语言中消失,它们只是以更好的方式实现。 C设计指针的方式并不好,但它有助于实现其目的。它有很多原因并不好,一个是:它打破你程序的不变性。我并不是要避免它,当然它们对C来说至关重要。

答案 2 :(得分:0)

在Java中:

  • 您没有指向使用malloc分配的结构的指针,而是引用了使用“new”实例化的类的实例。 (在Java中,您不能像在C / C ++中那样直接为堆上的对象分配内存)
  • 原语没有指针,但是主库中内置了用于在对象中包装int,double等的库(Integer,Double)。