【原创】指针的本质和指针学习存在的误区 欢迎大家批评指正
出处http://all-things-zklhp.tk/?p=231
;; **************************************************************************************************************
;; Author: zklhp
;; Email: zklhp@
;; QQ: 493165744
;; Last Update: 2014-08-12
;; Licensed under CC BY-SA 3.0
;; **************************************************************************************************************
* 楔子
因为我经常在bbs.bccn.net回答问题 所以对新人学习C语言过程中的困惑和学习的误区有一定的认识 从我的经验看 对于C语言指针 大部分学习者都没有一个清晰的认识
* 指针的本质
根据我的理解 C语言的指针是一种寻址手段 是计算机间接寻址方式的一种高级语言实现 对于C语言来说 指针之所以重要 有如下的原因
+ *C语言底层的特点决定*
因为C语言比较底层 所以实现间接寻址是必须的 这可能是指针提出的初衷
+ *C语言讲究效率的特点决定*
C语言比较讲究高效 某些时候 使用指针确实能够提高效率 比如 在结构体作为函数参数的时候 传递一个指向这个结构体的指针要比直接传递这个结构体快的多
+ *指针可能是唯一的选择*
某些时候 指针可能是唯一的选择 一个经典的例子就是通过函数交换两个变量的值 由于C语言中函数调用的时候是传值的 所以指针可能是唯一的选择 还有就是内存管理 如果离开了指针是很难实现的 (插入一点 我以前也写过 指针本身并不难 难的是 指针往往和其他东西 比如内存管理 同时出现 导致很多人觉得指针很难 对指针的本质理解不深)
* 指针学习的误区
指针学习中存在的误区主要是对指针的神化 觉得指针是万能的 掌握了指针就掌握了C语言 用了指针就高效 这是错误的 很简单的例子是 一个冒泡排序 你把它变成用指针实现 效率还是很差 这是算法决定的 和指针这种寻址方式没有特别大的关系
* 对指针科学的认识
+ 不要神化指针 指针只是一种寻址方式
+ 指针学习要抓住本质和与其他寻址方式的区别
+ 该用指针的时候就用 不该用的时候 不用
最后一点需要解释一下 比如 a[i]和*p这两种形式 大部分时候对于编译出的二进制程序是没有影响的 就像上面说的 不是说你用了指针就高效 这种时候简单明了更重要 因为效率本来也没有区别