阿栋

marvin2_yul

导航

指针的含义——指针变量、指针的指针、指针使用的注意

指针其实很容易理解的,其他并不是大家想象的那么神奇,那么难。

一、指针的含义:指针其实就是一个变量,它所存放的不是数据,而是数据在内存中地址。当然指针也可以存放函数(方法)的地址,后面会讲到的。声明指针的关键符是*号,指向地址的关键符是&。

二、指针变量:

例如1:#include <stdio.h>

   int main

  { 

     int a =10;             //第一一个变量a,赋值为10

    int *p = &a;            //p就是一个指针变量,所指向的就是变量a的地址

    printf("%d\n"  ,  p);      //输出指针变量P所指向该地址的变量a的值

     }

 

例如2通过指针修改变量的值:

#include <stdio.h>

void change(int *a);

int main

  { 

     int a =10;             //第一一个变量a,赋值为10

   change(&a);           //p就是一个指针变量,所指向的就是变量a的地址

 

    printf("%d\n"  ,  a);      //输出指针变量P所指向该地址的变量a的值

     }

void chage(int *a)

{

  *a =20;          //通过指针修改a的值

}

三、指针的指针:通过上面介绍的指针含义跟指针变量,对于指针的指针字面上来理解大家应该能懂了吧,下面举个例子:

int mait

{

  int a = 20;             //第一一个变量a,赋值为10

  int *p = &a;            //p就是一个指针变量,所指向的就是变量a的地址

    int **pp = &p;           //pp就是一个指针的指针变量,所指向的就是变量指针变量p的地址(&p表示指针变量p的地址)

      printf("%d\n" , **pp)       //输出的值就是a的值

}

输出:20

上面的例子这样写的话你们会更明白  *pp == p;        //指针变量*pp找到指针变量p的存储空间

                 *(*pp) = *p = a;    //指针变量*pp找到所指向地址的值(两者相同)

                 **pp = *p = a;    //指针变量*pp找到所指向地址的值(两者相同)

 

 

四、指针使用的三大注意:

①:指针类型只能指向相同类型的数据

 

错误演示1:

 #include <stdio.h>

int main

{

 

  int *p ;

  double d = 10.0 ;

  p = &d;

 

  printf("%d\n" , *p);    //不会报错,只会警告!

 

}

 

②:指针变量只能存储地址

错误演示2:

#include <stdio.h>

int main

{

  int *p ;

   p = 200;       //p只能存储地址 , 除非200是一个地址

  printf("%d\n" , *p);

}

③:指针变量未经过初始化,不要拿来间接访问其他存储空间

错误演示3:

#include <stdio.h>

int main

{

  int *p ;

  printf("%d\n" , *p);

}

 

posted on 2015-10-26 21:14  阿栋  阅读(1122)  评论(0编辑  收藏  举报