指针理解及相关知识

    引言:C语言中一种重要的数据类型就是指针,指针是C语言的特色之一。

               正确灵活地运用指针,可以使程序编写简洁,紧凑,高效。

           利用指针变量可以有效地表示各种复杂的数据结构,如队列(queue)、栈(Stack)、链表(Linked Table)、树(Tree)、图(Graph)等等,正是由于复习数据结构,发现当时C语言指针学的一点都不好,指针这部分确实有点难,最近花了几天时间研究指针,总结了一下。

               因此,熟练掌握和正确使用指针对一个成功的C语言程序设计人员来说是十分重要的。

正题:

        学指针最重要的是记住两点:①指针=地址,地址=指针,指针相当于地址     ②画图,画图,画图 (画图可以很好理解,要不绕来绕去的,一会儿就晕了)

       

       (1)首先,在计算机中,所有的数据都是以二进制形式存放在内存储器(简称内存)中的。

              就是要画这个内存图。

名字 内存地址 内容
例如:a 例如:0x6000 存放数据,变量,
         p1           0x6001  
        ....           0x6002  
            0x6003  
            0x6004  
            0x6005  
            0x6006  
            0x6007  
            ……               ……

 访问内容那一列需要通过地址标号进行访问,可分为直接访问(寻址)和间接访问(寻址),指针相当于间接访问(寻址)。

            直接寻址方式:可以直接通过变量地址对其存储单元进行操作

            间接访问(寻址):就是一个变量a,里面存放内容,把a的地址放到另一个地址的内容中,这个变量叫p,这个p就可以认为是指针。直接画图吧,看的更清楚。

名字 内存地址 内容(存放数据,变量,)
例如:a 例如:0x6000 变量a的内容
                   0x6001  
     
            0x6003  
            0x6004  
         p(指针变量)           0x6005 0x6000(p指针变量的内容为 地址   =指针)
            0x6006  
            0x6007  
            ……               ……

   

       (2)开始指针变量的定义(重点理解好   * 星号的用处

             ① 指针变量定义的一般形式:

                 【类型修饰符】 数据类型   * 变量名列表;

                                             例如:

                                                   int      * p;   //  * 星号 是与变量名p分开的,p是指针变量,而不是*p是指针变量。

                                                                        //   这个*星号很重要,表示后边跟的指针变量,不是普通变量

                ②指针变量的初始化

                                                   int *p=&a;   //在这的*星号称为指针运算符或称为“间接访问内存地址”运算符;

                                                                        //在定义时,通过它表明某个变量被定义为指针变量,

                                                                        //而在使用时,*p表示p所指向的变量的内容。就是取内容,画图,画图,画图如下

                                                  

         p(指针变量)           0x6005 0x6000(p指针变量的内容为 地址   =指针)

      *p   取的p的内容为0x6000,就是取的最后一列

例如:a 例如:0x6000 变量a的内容

&a 是取a的地址,就是取的中间那一列。

把这个地址放到p中当做内容,这个地址就是指针。

                最后还有一些相关名词,指针,指针变量,指针数组,数组指针,指针函数,函数指针,指针的指针,,要看最后一个名词是什么,以哪个名词结尾,

例如指针数组,最后一个名词是数组,说明它是一个数组,然后解释为一个由指针组成的数组(各个元素都是指针) char *p[10]

       数组指针,数组名本身就是一个指针,指向数组的首地址,注意这是一个常数。  char (*p)[10];

暂时这么多。

猜你喜欢

转载自blog.csdn.net/lexiaowu/article/details/81266488