“指针”是成熟的编程语言必须具有的概念吗?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

“指针”是成熟的编程语言必须具有的概念吗?

a123456678 2016-06-08 20:26:17 1398

我在看一个日本人写的书《征服 C 指针》,书上的引言提到这么一句话

确实,“C指针”有着底层而邪恶的一面,但是,它又是构造链表和树等“数据结构”不可缺少的概念。如果没有指针,我们是 做不出像样的应用程序的。所以,凡是真正成熟的开发语言,必定会存在指针,如Pascal、Delphi、Lisp 和Smalltalk 等,就连Visual Basic 也存在指针。 早期的Perl 因为没有指针而饱受批评,从版本5 开始也引入了指针的概念。 当然,Java 也是有指针的。很遗憾,世上好像对此还存有根深蒂固的误解。

在本书中,我们将体验如何将指针真正地用于构造数据结构。

“指针”是成熟的编程语言必须具有的概念。
它上面提到的这些语言我都没有学过,但是根据我学过的 JavaScript,Python 和 Ruby,它们都是没有指针的啊,这是怎么回事呢?难道是作者错了,还是我理解有问题呢?

JavaScript 前端开发 Java Ruby Python Perl
分享到
取消 提交回答
全部回答(1)
  • a123456678
    2019-07-17 19:32:41

    指针的本意是:在一个变量中保存另一个变量的地址,以提供将“地址”变量化的能力。如果没有指针,将无法用一个变量引用另一个变量(只能把变量的值拷贝一份赋给另一个变量)。

    C语言中提供了完善的指针操作,包括为指针赋值、内存分配(malloc)、取变量地址、让指针可以参与运算等,这使得C程序员能够任意操作可用内存。

    Java(Javascript)中也有指针,只不过与C相比,Java对程序员使用指针有着严格的限制,仅允许赋值操作,而且不是任意值,只能是通过new创建的对象引用或其他引用变量的值。不过Java一般不说指针,而是用引用(reference)来称呼指向对象的指针,不过,Java中仍然可以找到一些指针存在的影子,例如,当一个对象为null时调用方法会导致null pointer异常,即所谓的空指针错误,可见Java内部使用的确实是指针。

    很多基本的数据结构,例如链表、树、图等,都必须用指针来保存前驱或后继节点的地址,否则这些数据结构无法实现。

    如果一个语言不提供指针,虽然在理论上它也具备完整的计算能力,但很多在其他语言中非常简单的问题都将变得极其复杂(本来想举个例子的,但一时想不起了,不过这个结论肯定是正确的)。

    所以这个作者说的是对的,只是你需要理解指针的本质,不要错误地认为只有像C语言那样的指针才叫指针,真正的指针的概念请看我开头的那句。

    0 0
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程