概念:
指针就是指地址, 指针是一种数据类型,专门用来存储地址这种数据的数据类型。
指针变量的定义:
基类型 * 变量名;
eg:
 int a = 10 ;
 int *p = &a;
*p运算:
 1、首先拿出p中地址,到内存中定位
 2、定位到之后,从定位处开始,偏移出sizeof( 基类型 ) 的一块空间
 3、将这块空间当作一个基类型的(变量)来看
(可以使用强转将不同类型的变量放在指针中)
    &*p  //&(*p)  相当于取a的地址
     
     打印地址使用 ------> %p 
     
     *&p   //  ====》 p本身
               //p存放的是int * 
               // &p ==> 对应地址的类型是 int**  //int*表示基类型 后面的*表示说是一个地址类型的数据
               //*(&p)  《==》  基类型变量来看(int*类型的一个变量)  
     
     *&a   // 也就是a
     
     &*a   //会报错 a不是一个指针类型的变量 所以不能编译!运算类型不对
     
指针初始化:
 int *p; //野指针  ---  指向不明确的指针    
int *p = NULL ; //NULL是 地址 0。
--------------------------------
 连续定义多个指针变量的时候:
 eg:    int *p1,*q1,*r1;                  //不能使用int *p,q,r;
     
     
 为什么需要指针?
 有些时候,不使用指针,没有办法达到想要的效果!
一次函数调用只能返回一个结果,可以通过指针的调用返回多个结果。    
 eg:
  int add(int a, int b , int *rAdd)
  { 
      int ret ;
      ret = a + b;
      *rAdd = ret;     //通过指针的间接访问实现 被调函数 修改 主调函数中的 变量
      return re
  }
  
  int main(void)
 {
     int ret1 = 0;
     printf("%d",add(1,2,&ret1));   //此时ret1中的数据就变成了ret的值啦,也就是3
 }    
     
     
 注意:
   使用方法:(被调修改主调)
   1、 要修改谁,就把谁的地址传过去
   2、 !!!!一定要对其做 * 运算
     
     










