回答
指针是间接的:不是使用数据本身,而是使用指向数据的(某物)。根据语言的语义,这允许很多事情:便宜地切换到另一个数据实例(通过将指针设置为指向另一个实例),通过指针允许访问原始数据,而不必制作(可能是昂贵的)副本等
内存分配与指针有关,但是分开:你可以有指针而不分配内存。你需要内存分配指针的原因是分配的内存块的实际地址在编译时并不知道,所以你只能通过间接级别访问它(即指针) - 编译器静态分配空间给指针将指向动态分配的内存。
指针(或虚拟机/机器上的等价物)需要*具有[通过共享呼叫](http://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_sharing),如果您相信易变性,它是*必须*在大多数“OO”语言中。也就是说,传递的数据并不仅仅是昂贵的:副本就是副本。 – 2012-04-16 05:35:13
指针非常强大。仅仅因为现在计算机的处理时间更快,并不意味着放弃像指针这样重要的东西是任何理由。在堆栈上传输大块内存的效率最差,最糟糕的是灾难性的。使用指针,您只需要维护对数据所在位置的引用,而不是在每次调用函数时都复制大量的内存。
此外,如果您每次都复制所有数据,您如何修改原始数据?除了在每次接触它的调用中返回结构的副本。
我记得在Dijkstra正在评估一个学生编程课程的地方读书;这个学生很聪明,但他/他无法解决问题,因为有一种心理障碍。
所有的代码是有点儿好,但现在需要的是简单地使用表达式
a[a[i+1]] = j;
即使如此接近的解决方案仍然是目标似乎很远。
语言“无指针”已经存在......例如, BASIC。没有显式指针,也就是说。但是,这种间接的想法......可以让数据意味着在哪里寻找其他数据的想法对编程至关重要。
数组的想法是关于能够使用计算值来查找其他值。
试图隐藏这个想法是一个可怕的计划。根据迪克斯特拉的观点,任何接触过BASIC语言的人都已经接受过这样的精神伤害,这种伤害不可能像一个好的程序员那样恢复(可能缺乏明确的间接性是其中一个问题)。
我觉得他很夸张。
只是有点。
我想我受到你提到的那个“心理障碍”的困扰。编程中有一些概念,我不能“得到它”。指针,数组,布尔值提到几个 – user1325414 2012-04-16 06:00:03
阵列概念可能是最重要的代谢首先,所以我建议与他们玩很多。我很幸运,因为我的第一个编程语言是汇编程序,并且我可以获得的所有内容都是65536个元素。指针和数组索引在哲学层面上没有什么不同。关于布尔值,真的没什么可以理解的,它只是单个信息的一种可能的解释。要么做或不要。是或否。白色或黑色。对或错。零或一个。 – 6502 2012-04-16 06:25:04
- 1. 如何实现可以用void实例化的智能指针?
- 2. 我不能用keytool做什么,我可以用OpenSSL做什么?
- 3. 是否可以描述一个不可能实现的功能?
- 4. 为什么指向返回引用的指针不可能?
- 5. 表格可以做CSS定位不能做什么?
- 6. webkit可以做什么?
- 7. Merlin Agent可以做什么?
- 8. C++:实现智能指针
- 9. 为什么解组指针变量不可能?
- 10. 什么Flash可以做HTML5不?
- 11. 什么是MD5CryptoServiceProvider,它可以做什么?
- 12. static_cast是否可以将非空指针变成空指针?
- 13. 是否有可能在Android中使用指针实现鼠标驱动程序?
- 14. 有人可以告诉我我可能会做错什么
- 15. 什么__contains__做什么,可以调用__contains__功能
- 16. 删除智能指针,但仍可以访问指针?
- 17. 有什么办法可以在jQuery中实现MaintainScrollPositionOnPostBack功能
- 18. 什么是Perl中,可以实现帕罗代理功能
- 19. 什么是可以做的,哪些不能由%完成?
- 20. TPL表可以做什么Proc Tabulate不能?
- 21. 为什么C#可以这样做而C++/CLI不能?
- 22. IBM Rational Rose可以做什么Microsoft Visio不能?
- 23. 是否可以使用%和double?如果不是我能做什么?
- 24. 不知道这个指针可能指向什么,也无法解释结果
- 25. 为什么接口不能通过指针引用实现方法,而直接访问仍然可行?
- 26. 否则IF +什么都不做c#
- 27. 是否可以使用JavascriptMVC实现撤销/重做引擎?
- 28. 引用与实现中的指针有什么不同?
- 29. 为什么不能使用NULL指针?
- 30. C - fscanf可以使用字符指针,但不能使用双字符指针?
它的种类取决于语言。用C++,基本上没有。指针在该语言中非常重要。 Java也是一样(有点)。另外,一些C库会大量使用它们(如Glib)。 – Hassan 2012-04-16 05:25:56