所以我很难掌握指针和所有内存分配背后的想法。
我现在想的是,现在计算机功能强大,为什么我们必须使用指针呢?
在没有指针帮助的情况下,是否总有办法解决问题?
答案 0 :(得分:1)
指针是间接的:您不是使用数据本身,而是使用指向数据的(某物)。根据语言的语义,这允许很多东西:廉价地切换到另一个数据实例(通过将指针设置为指向另一个实例),传递指针允许访问原始数据而无需制作(可能是昂贵的)副本等等。
内存分配与指针有关,但是分开:你可以在不分配内存的情况下使用指针。你需要内存分配指针的原因是分配的内存块所在的实际地址在编译时是不可知的,所以你只能通过间接级别(即指针)访问它 - 编译器静态地为内存分配空间指向动态分配内存的指针。
答案 1 :(得分:1)
指针非常强大。仅仅因为计算机现在有更快的处理时间,并不意味着任何理由放弃像指针一样重要的东西。在堆栈上传递巨大的内存块效率最低,最糟糕的是灾难性的。使用指针,您只需要维护对数据所在位置的引用,而不是每次调用函数时都复制大量内存。
另外,如果您每次都复制所有数据,您如何修改原始数据?除了在每次接触它的电话中返回结构的副本。
答案 2 :(得分:0)
我记得曾在某地读过Dijkstra正在评估一名学生参加编程课程;这个学生非常聪明,但他/她无法解决问题,因为有一种心理障碍。
所有代码都很好,但需要的只是使用表达式
a[a[i+1]] = j;
即使离解决方案如此接近,目标似乎仍在数英里之外。
“没有指针”的语言已经存在......例如BASIC。没有显式指针,即。但是间接的想法......你可以让数据意味着在哪里找到其他数据的想法是编程的核心。
数组的想法是能够使用计算值来查找其他值。
试图隐藏这个想法是一个可怕的计划。根据Dijkstra的说法,任何接触过BASIC语言的人都已经接受过这样的精神残割,作为一名优秀的程序员,这种精神残割是不可能恢复的(并且可能缺乏明确的间接性是其中一个问题)。
我认为他夸大了。
一点点。