2012-04-16 64 views
1

所以我很难掌握指针和所有内存分配背后的想法。指针可以做什么,否则不可能实现?

我现在的计算机和现在一样强大,他们现在为什么我们必须使用指针?

在没有指针的帮助下,是否总是有一种解决方法来执行操作?

+0

它的种类取决于语言。用C++,基本上没有。指针在该语言中非常重要。 Java也是一样(有点)。另外,一些C库会大量使用它们(如Glib)。 – Hassan 2012-04-16 05:25:56

回答

1

指针是间接的:不是使用数据本身,而是使用指向数据的(某物)。根据语言的语义,这允许很多事情:便宜地切换到另一个数据实例(通过将指针设置为指向另一个实例),通过指针允许访问原始数据,而不必制作(可能是昂贵的)副本等

内存分配与指针有关,但是分开:你可以有指针而不分配内存。你需要内存分配指针的原因是分配的内存块的实际地址在编译时并不知道,所以你只能通过间接级别访问它(即指针) - 编译器静态分配空间给指针将指向动态分配的内存。

+1

指针(或虚拟机/机器上的等价物)需要*具有[通过共享呼叫](http://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_sharing),如果您相信易变性,它是*必须*在大多数“OO”语言中。也就是说,传递的数据并不仅仅是昂贵的:副本就是副本。 – 2012-04-16 05:35:13

1

指针非常强大。仅仅因为现在计算机的处理时间更快,并不意味着放弃像指针这样重要的东西是任何理由。在堆栈上传输大块内存的效率最差,最糟糕的是灾难性的。使用指针,您只需要维护对数据所在位置的引用,而不是在每次调用函数时都复制大量的内存。

此外,如果您每次都复制所有数据,您如何修改原始数据?除了在每次接触它的调用中返回结构的副本。

0

我记得在Dijkstra正在评估一个学生编程课程的地方读书;这个学生很聪明,但他/他无法解决问题,因为有一种心理障碍。

所有的代码是有点儿好,但现在需要的是简单地使用表达式

a[a[i+1]] = j; 

即使如此接近的解决方案仍然是目标似乎很远。

语言“无指针”已经存在......例如, BASIC。没有显式指针,也就是说。但是,这种间接的想法......可以让数据意味着在哪里寻找其他数据的想法对编程至关重要。

数组的想法是关于能够使用计算值来查找其他值。

试图隐藏这个想法是一个可怕的计划。根据迪克斯特拉的观点,任何接触过BASIC语言的人都已经接受过这样的精神伤害,这种伤害不可能像一个好的程序员那样恢复(可能缺乏明确的间接性是其中一个问题)。

我觉得他很夸张。

只是有点。

+0

我想我受到你提到的那个“心理障碍”的困扰。编程中有一些概念,我不能“得到它”。指针,数组,布尔值提到几个 – user1325414 2012-04-16 06:00:03

+0

阵列概念可能是最重要的代谢首先,所以我建议与他们玩很多。我很幸运,因为我的第一个编程语言是汇编程序,并且我可以获得的所有内容都是65536个元素。指针和数组索引在哲学层面上没有什么不同。关于布尔值,真的没什么可以理解的,它只是单个信息的一种可能的解释。要么做或不要。是或否。白色或黑色。对或错。零或一个。 – 6502 2012-04-16 06:25:04

相关问题