我的理解之我的理解之——C语言指针语言指针
今天一时兴起,想写写对于指针的理解,希望能用最简单的语言,表达的清楚明白,更希望能帮到刚刚接触C指
针的同学。写这还是蛮有成就感的,我咋就不去当老师列? 真是浪费了! 呵呵! 如果你有什么心得体会,也写
写呗,写给别人看的同时,其实自己就温习了一遍,先人说”温故而知新......“,后面是啥? 哎!写程序写啥了,
不记得了,呵呵! 反正一句话,对你有好处的,呵呵!
虽然我是电信专业的,大学期间,学过C,C++,但是因为贪玩,其实啥都不懂,考试能抄就抄,不能抄就交钱补考呗,反正
文凭被我混到手了,哈哈! 对于C语言这门学科,基本上我是在毕业1年之后,在工作中被逼无赖才开始学的。之前都是51的
汇编哦,哈哈! 因为当时看到别人都用C语言写程序,感觉很高级,很牛掰,所以我当时也好想牛掰一把,呵呵。可能是本人
那时候还比较聪明,自从照着别人的C代码做了一个数字钟后,就忽感,原来C语言是这样用的啊,明白了,领悟了,开窍
了。就开始了我的C编程的经历! 这几年过来,对于C语言的领悟就是指针的用处很大,很多,很广,还有一点就是,当你的
程序写的越多,你会发现程序的结构越来越重要,特别是对于多资源的运行管理这块就是很大的挑战,真是的没有最好,只有
更好! 好了,废话不多说了,开始入题吧!
声明一下:其中有些东西写的可能不够严谨,但请同学你不要站牛角尖哦,学习是为了提高的,不是么?
因为常规变量大家都熟悉,也好理解,就从常规变量说起吧,这里我用比较通俗的话来说,不用专有名词,方便大家理解,变
量像一个杯子,里面可以放白开水,喝掉白开水还可以倒入果汁,喝掉果汁还可以倒入放酒,说白了就是一个可以装各种液体
的容器,那变量就是杯子,里面存放的数据就像是杯中的液体,液体分很多种,你想和哪种就倒哪种液体,随意选择,同样,
那数据也分很多种,至于是哪种,就要看你的设计需求了,比如,你要做一个计数器,那你就需要一个可以存放计数值的变
量,不然你怎么知道某个时刻计数计了多少呢? 所以必须要一个变量存放计数值,计数值就是变量中的数据。太啰嗦了,呵
呵,是不是觉得这简单的东西说的这么繁琐,哎! 我也觉得,呵呵,那就但愿那些刚入门的人可以学到点那个啥吧 !
先说下,所有的变量自身是有地址的,一定要理解这点啦。就像你有家,我也有家一样,并且每个家都有一个唯一的通讯地址
门牌号,这样可以网购买东西,直接寄回家来,我经常在网上买元器件的哦,呵呵!
指针是啥呢? 我们常说的指针其实全名叫指针变量,指针变量也是一个变量,和上面说的常规变量没有任何区别的,区别只
是这个变量存放的数据是另一个变量的地址而已,和变量自身的地址是没有半毛钱的关系的。这点理解了就很好理解指针了。
上面举例说的计数值变量,是指存用来放计数值数据的变量。所以说指针变量和一般变量其实是一样一样的,只是存储的数据
名义不同罢了,指针变量里面放的也是数据,只是这个数据值是另外一个变量的地址而已。一般我们常说“某个指针指向谁谁
谁”,怎么理解? “某个指针”就是一个指针变量A,“谁谁谁”就是指另外一个变量B, A里面存放的数据值就是B变量自身的地
址。
uint8 *pa; // 定义一个指针变量pa,专门用来存放uint8数据类型变量的地址的。
uint8 a; // 定义一个变量a
pa = &a; // 将变量的a的地址值赋给变量pa,那么就说”pa指向了a“。
指针的操作:
一旦指针pa指向a了(即执行了 pa = a之后),就表明可以用pa读写a了,当然a自身也是可以进行读写的。
uint8 *pa; // 定义一个指针变量pa,专门用来存放uint8数据类型变量的地址的。
uint8 a; // 定义一个变量a
uint8 m; // 定义一个变量m
指针的赋值:
pa = &a;
这里&的符号是指取地址的意思,即取得变量a的地址,也即pa指向a
pa = a;
这里没有&的符号,则意思就是将变量a的内容赋给指针变量,而不是取变量a地址,和上面一句有区别的,赋值完了以后,指
针变量pa和a没有任何关系了。
指针的读写:
pa = &a; // pa指向a
*pa = 200;// 通过指针pa写入数据200到a,和 a = 200的效果是一样的,因为上面的pa已经指向了a。理解就是pa间接的写数
据到a
m = *pa; // 通过指针pa从a中读取数据,然后赋值给变量m,和m=a效果是一样的,实际上就是pa指针间接的读数据到a