C语言——指针总结

        在创建指针时,我们首先要做的是先初始化它,没有初始化的指针是很危险的,因为指针可以指向一个地址后直接改变它的值,所以为了避免我们的指针在创建后指向一个危险区域(即可能指向系统文件等),我们会先给它一个空值( NULL 或者  ^ ),这就是初始化指针。

 

        int *p = NULL;  //定义一个指针,并将它初始化(指向 空 )

 

        因为 NULL 是一个不指向任何内存位置的值,所以不用担心意外覆盖内存,不用担心意外改变某些值。如果不初始化,在使用指针储存一个值的时候,谁也不知道会覆盖什么内容。

        我们来看一下指针的应用:

 

         int a ;  //  定义一个变量

        p = & a ;  //  这里指针 p 指向(储存)的是变量 a 的地址(& 是寻址运算符,作用是访问 a 的地址)

        *p = a ;  //  这里指针 p 指向(储存)的是变量 a 的值  (* 是间接运算符,作用是访问 a 的值)

 

        我们使用指针,可以直接找到一个地址,然后改变它的值,看以下代码:

 

        int *p = NULL ;  // 定义一个指针,并将它初始化(指向 空 )

        int n = 0 ;  //  定义一个变量 n ,它的值为 0

        p = &n ;  //  指针 p 指向 n 的地址,此时 p 的值已经是  n 值 0 了

        *p = 2 ;  //  修改指针的值,这时也就通过指针间接修改了 n 的值

 

        这时 n 的值已经由 0 变成 2 了0这就是通过指针间接修改了 n 的值,这也是我们喜欢用指针的原因,因为它灵活,方便,只要知道地址,我们就可以精确地找到我们要找的,并修改它;

       为了让大家更理解,我们再在前面的代码后面加上两行:

 

        ++ *p ;  //  自加

 

       现在 n 的值已经变成 3 了,在上面的一行代码中,指针 p 自加了 1 ,值由 2 变成了 3 ,于是 n 的值也变成了 3 ;

       指针还有一个让人容易迷糊的地方就是 指向指针的指针,其实只要理解了指针,指向指针的指针也很容易理解;

 

        int **p1 = &p ;  //  定义了一个指向指针的指针 **p1 ,并让它指向了 指针p;

 

       此时, p1 指向(储存)的是指针 p 的地址,p1 指向(储存)的是指针 p 的值;所以此时 p1 的值是 p 的值 3 ;

        此时若改变 p1 的值,那么根据指针的规则, 指针 p 的值会随之改变,而因为 p 是指向 n 的指针,所以 n 的值也会改变,这是一个传递的过程。

posted @ 2017-10-13 23:27  烟尘杨柳  阅读(174)  评论(0)    收藏  举报