1

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

我现在在想,现在计算机如此强大,为什么我们必须使用指针?

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

4

3 回答 3

1

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

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

于 2012-04-16T05:28:42.627 回答
1

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

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

于 2012-04-16T05:31:01.507 回答
0

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

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

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

即使如此接近解决方案,目标似乎仍然遥遥无期。

“没有指针”的语言已经存在……例如 BASIC。没有明确的指针,就是这样。但是间接的想法......你可以让数据意味着在哪里可以找到其他数据的想法是编程的核心。

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

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

我觉得他夸大了。

一点点。

于 2012-04-16T05:50:01.337 回答