吹着牛B学C语言之---指针
Kunsa原创,转载请注明地址
初学C语言的朋友对指针很畏惧,其实没啥可怕的,之所以大家对指针的概念很模糊是因为和指针联系的东西很多,比如,指针数组,函数指针。。。。
从最基本的开始说:指针就是一个内存地址。。。说完了。指针就这么一个知识点。关灯,睡觉!
呵呵。有点吹牛B,其实就是这么一回事儿,指针就是一个内存地址,关键是他指向哪里,比如,有些指针指向变量,有些指向数组的头元素(其实就是指向数组),有的指针指向函数(这个用的很少。。),C++里边有的指向对象。。有点乱,其实如果你看不懂这段,完全不是因为你指针没有学好,是因为你的其它知识没有储备到位,不用着急,慢慢储备!
说明指针以前应该了解一下函数参数的传递方式,函数参数分按值传递和按地址传递(C++里边还有个按引用传递,暂且不谈),按值传递很好理解,比如,a=1,将a传给一个参数,就是把a复制一下传进去,注意,是复制,不是直接传进去。按地址传递有点难理解,我通俗一点说啊。按地址传递的话就是告诉函数,如果想操作这个变量就到这个地址这里去操作,比如,传int型变量a的指针,比如这个变量地址是0x1234567(具体地址表示方式我忘记了。⊙﹏⊙b汗。但是是这个意思的),那么函数想操作这个的时候就直接去0x1234567去操作了,而如果是按值传递,那就是复制一下,复制后的地址,,,鬼才知道。。
。。。。。好像指针就这么些东西。。。。。
再有就是malloc和free的了。。那个。。讲起来就更费劲了。。。先暂时理解这么些吧!其实大家有时间看看MSDN,对语言的理解很有帮助,呵呵。加油!
Kunsa一家之言,仅供娱乐!如有错误,敬请指正! Kunsa拜上!~~~
2010.5.24 对小锐朋友提出的错误表示感谢!
修改:我在上边说的“如果是按值传递,那就是复制一下,复制后的地址,,,鬼才知道“
这段话有问题,在x86汇编里边,函数的参数传递分为三种,
----------图片引自看雪论坛
如果您看不懂这个图片也大可不必伤神,里边涉及到的都是汇编知识,我稍微说一下,函数在传递参数的时候,包括传递指针,都是往堆栈中push变量,堆栈是系统为程序分配的一段内存,主程序在调用函数之前,先把需要传递的参数push到堆栈中,然后被调用的函数pop它们。在函数中的局部变量也是暂存在堆栈中。函数结束需要有个堆栈平衡,平衡堆栈的方法不同也就出现了三种不同的函数调用方式。。这个我就不细说了,呵呵,太详细的话就没完没了了。如果哪位有兴趣可以单独联系我。。