1.一维数组
一维数组名即是一个指针,它代表数组第一个元素的地址,利用指针可以对数组进行操作。
//例子
int a[5] = {1, 2, 3, 4, 5};
int *p = a;//指针p指向数组a第一个元素
2.二维数组
二维数组可以看作一维数组中元素类型是数组类型。数组名是指向数组第一个元素的地址,即二维数组名指向第一个数组的地址。
我们可以利用数组名当作指针对数组进行操作,但在实际运用中,指针和二维数组的关系如下:
(1)数组指针
设p为指向二维数组的指针变量,那么:
int a[2][3] = {1, 2, 3, 4, 5, 6};
int (*p)[3] = a;
p是一个指针变量,它指向包含3个元素的一维数组。即根据上述,p指向数组第一个元素的地址,只要知道数组的元素个数就可以将二维数组所有元素输出。
(2)指针数组
#include<iostream>
using namespace std;
int main()
{
int a[2][3]={1,2,3,4,5,6};
int* p[2]; //指针数组
for(int i=0;i<2;++i) //把每个数组元素的地址赋给指针数组
p[i]=a[i];
for(int k=0;k<2;++k) //输出数组
for(int j=0;j<3;++j)
cout<<p[k][j]<<" ";
cout<<endl;
return 0;
}
指针数组中元素是指针,每个指针需要指向一个一维数组,即形成二维数组的指针。
(3)指针的指针
#include<iostream>
using namespace std;
int main()
{
int a[2][3]={1,2,3,4,5,6};
int** p; //指针的指针
int* b[2];//b的类型就是指针的指针
p=b;
for(int i=0;i<2;++i) //把每个数组元素的地址赋给指针数组
p[i]=a[i];
for(int k=0;k<2;++k) //输出数组
for(int j=0;j<3;++j)
cout<<p[k][j]<<" ";
cout<<endl;
return 0;
}
和指针数组类似,因为指针数组名是指针的指针,所以可以转换为指针数组来解决问题。
3.总结
在函数运用中:
实参 形参
数组的数组 int a[m][n] int (*a)[n]
指针数组 int *a[n] int **a
数组指针 int (*a)[n] int (*a)[10]
指针的指针 int **a int **a
总之,给指针赋值时候,一定要清楚指针会指向是什么地方。