1.联系:把数组首元素的地址赋给指针
int a[10];
int* p;
p=&a[0];//或 p =a;
//此时p+i或a+i就是a[i]的地址
2.数组与指针**
- 引用数组元素的第二种方法:(a+i)或(p+i)
- 程序片段:
int a[10];
int *p;
for(p=a;p<(a+10);p++)
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.指向数组元素的指针**
一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们有相应的地址。指针变量既可以指向变量,也可以指向数组元素。数组元素的指针就是数组元素的地址。
int a[10]; //定义一个整型数组a,它有10个元素
int *p; //定义一个基类型为整型的指针变量p
p=&a[10]; //将元素a[0]的地址赋给指针变量p,使p指向a[0]
在C++中,数组名代表数组中第一个元素的地址(即序号为0的元素)。
p=&a[0];
p=a;
在定义指针变量时可以给它赋初值
int *p = &a[0]; //p的初值为a[0]的地址
//也可写成
itn *p = a;//作用相同
假设p定义为一个基类型为整型的指针变量,并将一个整型数组元素的地址赋给它。
则:
*p=1;//对p当前所指向数组元素赋予数值1
如果指针变量p已指向数组的一个元素,则p+1指向同一数组中的下一个元素。
- 如p的初值为&a[0],则:
p+i和a+i就是a[i]的地址,指向a数组的第i个元素;

(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; }