-1

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

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

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

4

3 回答 3

5

所以为什么?

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

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

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

基本上,这归结为更强的类型,以及缺乏指针算法。

于 2013-08-15T16:20:47.633 回答
1

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

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

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

你在幕后交换指针。有些语言像 Go 一样重新引入了指针的概念,但你不能用它做算术运算。

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

于 2013-08-15T16:41:50.283 回答
0

在 Java 中:

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