指针的难度在于多了一层抽象,也就是“一个变量是另一个变量的指针”这么一层抽象。很多人无法理解这层抽象。类似的还有递归:“一个函数由他本身定义”,还有“一个函数是另一个函数的参数。”这三者都是多加一层抽象,而抽象能力有限的人,很难理解这些内容。这才是指针难以理解的本质。
说语言特性、说内存管理、甚至说不用用到指针的都是没说到重点。没有理解指针,你用引用计数、用垃圾收集,你还是没有理解指针。就算你能碰巧写出正确代码,你也不可能真正理解。
指针当然没啥难的,不就是个地址么。
难的是C语言偷懒,不针对一些常见的模式设计语法(当然也可能是这些模式晚于C语言出现),所以大部分的功能都需要指针来实现,例如按引用传递对象,指针解决,动态绑定函数,指针解决,数组下标,指针解决,更别说内存映射、文件访问,全部都是指针指针……
指针承担了太多……