在我初学 C 的时候(初中)指针这一张死磕了 1 个月都没怎么看懂。一个叫做 a 的 int,它里面放了 1,要用它的时候用它的名字 a 代表它,要改它的值的时候 a=2,就行。这个语义很直观。
但要想象一个“指针”: 一个叫 p 的“指向 int ”的指针,它指向 a,到这里都还很好理解,可是!! 1. a 的地址跟 p 是 tm 什么关系? 2. p 的地址跟 p 是 tm 什么关系? 3. p 的地址咋就又成指针了?没有东西在指它啊??? 4. 把一个箭头传进函数里是什么鬼,这个意象好难想象 5. 蛤?修改箭头的指向本身?为什么我不能把箭头放进一个函数里让这个函数改这个箭头就完事了?? 6. 为什么修改 a 里边的值我不能把 a 传进来,必须传一个指着 a 的箭头??明明 a=2 却可以
上面的意象中是含有矛盾的地方的(比如修改 a 的值不能使用 a 这件事)如果把指针想象成箭头,一定会陷入上面的某些困惑里。但实际上指针并不是这种东西。
C 语言其实跟汇编极其接近,别看 C 有这么多内置类型(初中刚学的时候两周卡在第一章的数据类型上差点没放弃),实际上语义上总共也就分为两种,值和地址。
放值的变量,就是那堆 char int float..一开始学背单词背了好久的类型 放地址的变量,就是所谓的指针。