作为一名 CS 本科生,我从 C 开始,其中指针是一种重要的数据类型。此后,我接触了 Java、JavaScript、PHP、Python。它们本身都没有指针。
所以为什么?他们的语言中是否有一些类似指针的等价物,或者指针的功能不再重要?
我大致有一些想法,但我很想听听更有经验的程序员对此的看法。
作为一名 CS 本科生,我从 C 开始,其中指针是一种重要的数据类型。此后,我接触了 Java、JavaScript、PHP、Python。它们本身都没有指针。
所以为什么?他们的语言中是否有一些类似指针的等价物,或者指针的功能不再重要?
我大致有一些想法,但我很想听听更有经验的程序员对此的看法。
所以为什么?
一般来说,指针被认为太危险了,所以现代语言尽量避免直接使用它们。
他们的语言中是否有一些类似指针的等价物,或者指针的功能不再重要?
功能非常重要。但为了降低它们的危险性,指针已被抽象为毒性较小的类型,例如引用。
基本上,这归结为更强的类型,以及缺乏指针算法。
大多数面向对象语言将对象实现为 C 指针,但它们是抽象的,您无法更改它的值。因此,当您使用 this/self 在大多数情况下,它确实是一个指针(某些语言可能有一个对象表,用于更快的垃圾回收和其他优化)。
例如,在 Java 中,当您执行以下操作时:
Object t = new A();
t = new B();
你在幕后交换指针。有些语言像 Go 一样重新引入了指针的概念,但你不能用它做算术运算。
所以在某种程度上:没有指针没有从语言中消失,它们只是以更好的方式实现。C 设计指针的方式一点都不好,但它服务于它的目的。它不好有很多原因,一个是:它破坏了你程序的不变量。我并不是要避免它,当然它们对 C 至关重要。
在 Java 中: