1.联系:把数组首元素的地址赋给指针

    1. int a[10];
    2. int* p;
    3. p=&a[0];//或 p =a;
    4. //此时p+i或a+i就是a[i]的地址


    2.数组与指针**

    • 引用数组元素的第二种方法:(a+i)或(p+i)
    • 程序片段:
      1. int a[10];
      2. int *p;
      3. for(p=a;p<(a+10);p++)
      4. cout<<*p<<endl;

    3.++与—

    • *(p++):先取a[i]的值,然后p加1.
    • *(++p):先使p加1,然后取a[i+1]的值;
    • *(p—):先取a[i]的值,然后p减1;
    • *(—p):先使p减1,然后取a[i-1]的值;

    4.指针变量作函数参数接收数组地址

    • 数组名可以做函数的参数;
    • 指针变量可以做函数的参数;
    • 数组名和指针存在对应关系,可以利用指针变量接收数组地址。


    5.指向数组元素的指针**

    • 一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们有相应的地址。指针变量既可以指向变量,也可以指向数组元素。数组元素的指针就是数组元素的地址。

      1. int a[10]; //定义一个整型数组a,它有10个元素
      2. int *p; //定义一个基类型为整型的指针变量p
      3. p=&a[10]; //将元素a[0]的地址赋给指针变量p,使p指向a[0]


    • 在C++中,数组名代表数组中第一个元素的地址(即序号为0的元素)。

      1. p=&a[0];
      2. p=a;
    • 在定义指针变量时可以给它赋初值

      1. int *p = &a[0]; //p的初值为a[0]的地址
      2. //也可写成
      3. itn *p = a;//作用相同
    • 假设p定义为一个基类型为整型的指针变量,并将一个整型数组元素的地址赋给它。

    则:


      1. *p=1//对p当前所指向数组元素赋予数值1
    • 如果指针变量p已指向数组的一个元素,则p+1指向同一数组中的下一个元素。

      • 如p的初值为&a[0],则:
    • p+i和a+i就是a[i]的地址,指向a数组的第i个元素;

      1. ![批注 2020-08-14 095951.png](https://cdn.nlark.com/yuque/0/2020/png/2314091/1597370409824-e4cc7d94-34c8-4bf0-9735-349cef058ad7.png#align=left&display=inline&height=346&margin=%5Bobject%20Object%5D&name=%E6%89%B9%E6%B3%A8%202020-08-14%20095951.png&originHeight=460&originWidth=298&size=22935&status=done&style=none&width=224)
    • (p+i)或(a+i)是p+i或a+i所指向的数组元素,即a[i]。

    • 指向数组元素的指针变量也可以带下标,如p[i]与*(p+i)等价;
      • 引用一个数组元素的方法
    • 下标法,如a[i]形式;
    • 指针法,如(a+i)或(p+i).其中a是数组名,p是指向数字组元素的指针变量。使用指针法能使程序质量提高。
    • 下标法比较直观,指针法运行速度更快。

    6.用指针变量作函数参数接收数组地址

    • 用数组名作函数的参数,传递的是数组首元素的地址。用指针变量作函数形参,可接收从实参传递来的数组首元素的地址。
      #include <iostream>
      using namespace std;
      int main( ) 
      {
      void select_sort(int *p,int n); //函数声明 
      int a[10],i;
      cout<<″enter the originl array:″<<endl;
      for(i=0;i<10;i++) //输入10个数 
      cin>>a[i];
      cout<<endl; 
      select_sort(a,10); //函数调用,数组名作实参 
      cout<<″the sorted array:″<<endl; 
      for(i=0;i<10;i++) //输出10个已排好序的数
      cout<<a[i]<<″ ″;
      cout<<endl; 
      return 0; 
      }
      void select_sort(int *p,int n) //用指针变量作形参
      {
      int i,j,k,t;
      for(i=0;i<n-1;i++) 
      {k=i;
      for(j=i+1;j<n;j++) 
      if(*(p+j)<*(p+k)) 
      k=j; //用指针法访问数组元素 
      t=*(p+k);
      *(p+k)=*(p+i);
      *(p+i)=t;
      }
      }
      

    7.用指向数组的指针作函数参数

    • 多维数组名也可以作函数参数传递;
      #include <iostream> 
      using namespace std; 
      int main( ) 
      { void output(int (*p)[4]); //函数声明 
      int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; 
      output(a); //多维数组名作函数参数 
      return 0;
      }
      void output(int (*p)[4]) //形参是指向一维数组的指针变量
      { 
      int i,j;
      for(i=0;i<3;i++) 
      for(j=0;j<4;j++)
      cout<<*(*(p+i)+j)<<″ ″;
      cout<<endl; 
      }