其他语言上的C指针等价物


C pointer equivalents on other languages

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

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

我大致有一些想法,但我很想听听更有经验的程序员对此的看法。

为什么

一般来说,指针被认为太危险了,所以现代语言尽量避免直接使用它们。

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

功能非常重要。但为了降低它们的危险性,指针被抽象为毒性较小的类型,例如引用。

基本上,这归结为更强的类型和缺少指针算术。

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

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

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

您正在交换场景后面的指针。有些语言重新引入了指针的概念,比如Go,但你不能用它做算术运算

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

在Java中:

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