1.指针的概念

    • 直接访问:按变量地址存取变量的值。
    • 间接访问:将变量地址放在另一变量中,通过读取后一个变量的值来访问前者
    • 变量的地址称为该变量的指针
    • 指针变量:专门用来存放另一变量地址的变量
    • 什么是指针?

      • 在程序中定义一个变量,在编译时就给它分配内存单元。系统根据程序中定义的变量类型,分配一定长度的空间。内存区的每一个字节有一个编号。

        1. ![批注 2020-08-13 103358.png](https://cdn.nlark.com/yuque/0/2020/png/2314091/1597286059094-0e70f7cf-fc39-48ea-afc3-0358d991e5c0.png#align=left&display=inline&height=380&margin=%5Bobject%20Object%5D&name=%E6%89%B9%E6%B3%A8%202020-08-13%20103358.png&originHeight=507&originWidth=495&size=33454&status=done&style=none&width=371)

    2.变量和指针

    • 定义指针变量的一般形式
      • 基类型 *指针变量名;
      • 例:int *p;
    • 引用

      • &(取地址运算符)和*(指针运算符)
      • 例:通过指针变量访问整型变量

        #include <iostream>
        using namespace std;
        int main( ) 
        {int a,b; //定义整型变量a,b
        int *pointer_1,*pointer_2; //定义指针变量 
        a=100;b=10; //对a,b赋值 
        pointer_1=&a; //把变量a的地址赋给pointer_1
        pointer_2=&b; //把变量a的地址赋给pointer_2
        cout<<a<<″ ″<<b<<endl; //输出a和b的值 
        cout<<*pointer_1<<″ ″<<*pointer_2<<endl; //输出*pointer_1和 *pointer_2的值
        return 0; }
        
        • 运行结果: 100 10

    100 10

    • 指针作为函数参数
      • 函数的参数也可以是指针;在函数调用时,可以使用指针变量。
      • 指针变量是一种特殊变量,用来指向另一个变量。为表示指针变量和它所指向的变量间的联系,在C++中用“*”表示指向。
      • 例: i_pointer是一个指针变量,而*i_pointer表示其指向的变量

    这两个语句作用相同:

    i=3;
    *i_pointer = 3;
    
                                 ![批注 2020-08-13 103358.png](https://cdn.nlark.com/yuque/0/2020/png/2314091/1597288610726-365d9510-a347-484d-9b29-608abf14c1c4.png#align=left&display=inline&height=129&margin=%5Bobject%20Object%5D&name=%E6%89%B9%E6%B3%A8%202020-08-13%20103358.png&originHeight=172&originWidth=377&size=33454&status=done&style=none&width=283)<br />**3.指针作为函数参数**
    
    • 函数的参数不仅可以是整型、浮点型、字符型等数据。还可以是指针类型,作用是将一个1变量的地址传送给被调用函数的形参。
    • 例:即对两个整数按大小顺序输出。
      #include <iostream> 
      using namespace std;
      int main( )
      { void swap(int *p1,int *p2); //函数声明 
      int *pointer_1,*pointer_2,a,b; //定义指针变量pointer_1,pointer_2,整型变量 a,b
      cin>>a>>b;
      pointer_1=&a; //使pointer_1指向a
      pointer_2=&b; //使pointer_2指向b 
      if(a<b) swap(pointer_1,pointer_2); //如果a<b,使*pointer_1和 *pointer_2互换
      cout<<″max=″<<a<<″ min=″<<b<<endl;//a已是大数,b是小数
      return 0;
      }
      void swap(int *p1,int *p2) //函数的作用是将*p1的值与*p2的值交换 
      { int temp;
      temp=*p1; 
      *p1=*p2; 
      *p2=temp;
      }