指针(上)

从今天起,我会不定期的就某一科目做阶段总结。当然这些都是极浅显的,不会在任何栏目里发表,仅仅是为了能在准备、成文这样一分总结的过程当中更加深入的理解这一部分的内容。该方法目前正在实验中,如效果不理想应随时做出调整。这些文章没有先后顺序之分,只是看到哪写到哪,既然是写给自己的,顺序上就不要求那么严格。
      
        其实到了函数部分,C语言才真正精彩起来,之前的平铺直叙到了这里仿佛一下跌宕起伏起来。当然我今天要说的是指针,之所以在函数之前先说指针,因为今天的内容正好就是指针部分。由于涉及到指针数组的部分比较晦涩难懂,所以我把指针的内容分两部分完成,今天着重解决的是指针的一些基本特性,明天完成他的高级部分。
        所有人在提起C的时候都会说:想要学好C语言,那么一定得学好指针。在没学好这门语言之前,没资格对这句话提出异议,所以我会坚定不移的按着前人所指的方向前进。对于指针来说,其本身提供了强大灵活的数据操纵方式,使用指针可以更好的完成某些工作,而如果不使用指针,有些工作则会无法完成。如果说函数为C语言搭建起了一个结构化的平台,那么指针的意义就在于,他最大化的维持了所有运行在这个平台上的数据类型(尤其是数组)的秩序。而动态的“维持”要比静态的“平台”更复杂,这也注定了在学习他的过程当中要付出比之前大很多的努力。如果说函数给人的初印象是兴奋和赞叹,那么指针所给人的初印象则更多的是迷茫。
        我们对C语言已经有了一个初步的认识,知道了变量是用来存储数据的内存单元。在PC的内存当中,每一个内存单元都有其唯一的一个内存地址,这是我们在之前没有接触到的。而假如知道了某一个变量的地址,我们就可以创建另一个变量来存储前一个变量的地址。暂且先不说这样做的意义何在,总之我们现在只要明白,指针同样也是一个变量,他是一个用来存储另外一个变量的地址的变量。就象“只有存储了数据的变量才有意义”一样,只有存储了地址的指针才有意义。
        指针的初始化一直是个问题。和变量一样,指针也遵循“先定义后使用”的原则。假如忘记定义指针,后果将会是很严重的,因为指针存储的是某一个变量的地址,当调用一个未定义的指针时,他会随即的产生一个地址并带如程序,这个地址有可能指向某一个系统程序,严重的话可以使系统瘫痪。
                对指针的声明:typename  *pointer
                            初始化:pointer=&variable
        指针的最大的用途在于对数组的操纵,我假设我们已经对数知识是有了一定的了解。当然一个指针不可能指向数组当中的所有元素,所以我们让指针指向数组的头元素,也就是说,指针当中所存放的,是数组中第一个元素的内存地址,而由于数组具有顺序排列的特性,其他数组元素便可以相继找到自己在内存当中的位置。不带括号的数组是一个指针,比如data是data[]的首地址指针,也可以用&data[0]的形式来表示。
        从某种意义上讲,指针可以代替一组数组,这一点在数组作为函数参数的时候尤为重要。因为函数只允许传递单个数值而不能是数组,所以在函数的传递过程中,函数的返回值是一个指针,也就是数组的首地址,根据这个首地址可以进而得知数组中每个元素的地址,使得函数可以调用整个数组。那么又出现一个问题:如何让函数知道所调用的数组的长度呢?办法有两个,一是可以在数组的最后一个元素存储一个特殊值来标记数组长度,然而这样做必须要在数组末尾设定一个保留值,因此降低了在数组中存储数据的灵活性。我们一般采用第二种办法,将数组长度直接作为一个参数传递给函数,这种办法更灵活,不会对数组本身产生任何影响。

先写到这,第一次写关于程序的文章,感觉还是很累。之所以会这样,还是因为对程序本身的不熟悉,希望能通过这个总结的方法使我更快的对程序熟悉起来,明天是指针(下),希望能写得顺畅些并且精彩些,看明天的了。

你可能感兴趣的:(C程序设计,存储,语言,平台,工作,c)