Pointers 指针可以做什么,否则就无法实现?

Pointers 指针可以做什么,否则就无法实现?,pointers,Pointers,所以我很难理解指针和所有内存分配背后的想法 我在想,现在的电脑功能如此强大,我们为什么要使用指针呢 在没有指针帮助的情况下,不是总有一种解决方法吗?指针是一种间接的方法:您使用的不是数据本身,而是指向数据的(某个东西)。根据语言的语义,这允许很多事情:便宜地切换到另一个数据实例(通过将指针设置为指向另一个实例),传递指针允许访问原始数据,而无需制作(可能昂贵的)副本,等等 内存分配与指针相关,但是分开的:您可以在不分配内存的情况下拥有指针。内存分配需要指针的原因是,分配的内存块所在的实际地址在编

所以我很难理解指针和所有内存分配背后的想法

我在想,现在的电脑功能如此强大,我们为什么要使用指针呢


在没有指针帮助的情况下,不是总有一种解决方法吗?

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


内存分配与指针相关,但是分开的:您可以在不分配内存的情况下拥有指针。内存分配需要指针的原因是,分配的内存块所在的实际地址在编译时是未知的,因此只能通过一个间接层(即指针)访问它--编译器静态地为指向动态分配内存的指针分配空间。

指针的功能非常强大。仅仅因为计算机现在有了更快的处理时间,并不意味着这就是放弃像指针这样重要的东西的任何理由。在堆栈上传递大量内存充其量是低效的,最糟糕的是灾难性的。对于指针,您只需要维护对数据驻留位置的引用,而不是每次调用函数时复制大量内存


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

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

所有的代码都还可以,但所需要的只是使用表达式

a[a[i+1]] = j;
即使离解决方案如此之近,目标似乎还很远

“没有指针”的语言已经存在。。。e、 g.基础。没有显式的指针,也就是说。但是间接的想法。。。编程的核心思想是,您可以使用数据来表示在哪里可以找到其他数据

数组的思想就是能够使用计算值来查找其他值

试图隐藏这个想法是一个可怕的计划。根据Dijkstra的说法,任何接触过BASIC语言的人都已经受到了这样的精神创伤,作为一个好的程序员,这是不可能恢复的(可能没有显式间接寻址是问题之一)

我认为他是在夸大其词


就一点。

这取决于语言。用C++,基本上没有指针在那个语言中非常重要。Java也是如此(有点)。此外,一些C库大量使用它们(如Glib),指针(或VM/机器上的等效指针)是必需的,如果您相信可变性,在大多数“OO”语言中,指针是必须的。也就是说,不仅仅是传递数据会很昂贵:拷贝就是拷贝。我想我受到了你提到的“心理障碍”的困扰。在编程中有一些概念我不能“理解”。指针、数组、布尔值等等。数组的概念可能是最重要的,所以我建议大家多用它们。我很幸运,因为我的第一种编程语言是汇编语言,我所能得到的乐趣或多或少就是一个65536个元素的数组。指针和数组索引在哲学层面上没有那么大的不同。关于布尔值,真的没什么好理解的,它只是对一点信息的可能解释之一。要么做,要么不做。是或否,白色或黑色。对或错。零或一。