小鱼儿浅谈指针
c语言的指针可以说c语言灵魂,自己也学c一年多了说不精通,但还是有点解了(有些东西用的少还是不了解)。看到好多新手对指针不能理解,有些人学c了 学了指针但还是不知道怎么一回事情。好多人觉得学数据结构实在
难,大多原因是他们没有弄白指针。因为数据结构用c表示的话 90%都要用指针 其实可以说100% 都要用到。
数组难道不指针吗!!! 几乎数组可以和指针互换。
比喻说 int *p; 和int p[]; 你调用指针的时候可以用p[n] n为一个合理的整数。 你用数组的时候可以用 int *c=&s[0];
*c++;来调用。因为数组的数组名是固定的。他的地址是不能修改了 你不能s++ 这样编译器是会报错的。
但数组比指针更容易理解。但指针的效率要比数组快,因为数组最终还是转换为指针(不记得是在那本书上看到过的)。
所以指针 数组各有好处。
指针的缺点就不说了,反正就是太灵活了,搞他不定人就容易出现大麻烦。
指针到底是什么。
我开始学c 一直不明白到底是什么,还到那里傻不拉唧的以为明白了指针是何物。当有一天和网上的高手和写一个项目的时候,
看他写的通用链表(这个链表写的有点像树,单向链表套用单向链表)。我开始以为看明白了,等我仔细分析他的代码,我才发现
我连指针是什么都不知道。
我开始以为
int *p; 和 char *p; 的区别就是
生存一个4个字节的内存来存放一个数据。 和 生存一个1个字节内存来存放数据。
现在看来真的好可笑啊。。
现在我认为指针是什么呢。
就是一个存放一个32整数数值的变量而已(在32位系统中);
不要被他的星号迷惑。int *p1; 和int p2;可以说在一些情况可以相同。p1=&a;(一个整数的变量a的110(假设的));
p2=110;可以说等价的。但现实中你不能这样做,你不能把一个地址直接赋值一个变量。
然后*p2来调用对应地址的数据。 这样是行的。我自己实验过。现在在别人家没有编程的工具 不好贴代码。
但你一可以直接赋值一个指针 来调用是可以的。p1=110; 这样是可以的。 不可以就奇怪了。从这点看出来 * 只是为了告诉编译器他是指针 你必须用指针的方式来调用他,申明类型也是这个道理, int a ; 和 char a ; 和 int *a; 和char *a; 只是告诉编译是怎么处理这些数据而已。说到底这些数据本质都是0 1 所以只是编译器怎么处理而已。不同的处理表示的含义就不同了。
从上面可以推出。
int *p 和 int * *p;
本质没有差别。
都是指针。
二级 和n 级指针都可以看成一级指针。放着内存的地址而已。只是编译器的处理方式不同而已。
上面自己简单谈了自己对指针的看法,自己的技术很菜,自己随便谈一下自己的指针认识。如果有些东西实在错了 欢迎指正。
然后谈一下看书。
反正高手都是推荐看外国的书。自己国内 国外都看过。确实外国要比中国写的好。写的认真。。。。。。。中国没有办法,大多是向钱看,所以好多书写的不准确。 而中国的学生又喜欢把书上的东西当成圣旨来看的。有些地方可能作者随便说的一句话,他却当真了,当他跟别的书上 或者别人说的产生矛盾。这样他自己都不知道谁对 谁错了。
所以说 书上的不可全信,通过自己动手实践了,然后思考 自然会得出一个正确的答案。
你可以先看中国的书 但不要全信,然后在看一下外国的书。比较加分析 你自然会明白谁对谁错了。这样你自己也会进步很快。
[ 本帖最后由 小鱼儿c 于 2012-1-17 03:27 编辑 ]