数组指针,指向一个一维数组的指针,又称行指针,被二维数组赋值后可当作二维数组操作。
例:
int a[2][3];
a[1][2]=5;
int (*b)[3]=a;
cout<<a[1][2];
cout<<(*(b+1))[2];
cout<<b[1][2];
结果为:555
指针数组,是一个数组元素为指针的数组,每个指针元素可以指向一个一维数组、变量地址、二维数组某元素的地址。
例:
指针元素指向一维数组 | 指向变量地址 | 指向二维数某元素地址 |
int a[2][3]; | int x=2; | int a[2][3]; |
int *p[3]; | int y=1; | a[][]全初始化为0 |
int b[3]; | int z=5; | a[0][1]=7; |
int c[3]; | int *p[3]; | a[1][1]=9; |
b[1]=2; | p[0]=&x; | p[i]=&a[i][0];(0<=i<=1) |
c[1]=3; | p[1]=&y; | int **t=p; |
p[0]=b; | p[2]=&z; | int sum1=t[0][1]+t[1][1]; |
p[1]=c; | cout<<*p[0]; | int sum2=(*(p+0))[1]+(*(p+1))[1]; |
cout<<p[0][1]; | cout<<*p[1]; | int sum3=p[0][1]+p[1][1]; |
cout<<p[1][1]; | cout<<*p[2]; | cout<<sum1<<sum2<<sum3; |
结果为:23 | 结果为:215 | 结果:161616 |
拓展,动态二维数组当函数参数传递:
#include"iostream"
using namespace std;
int arraysum(int **t,int x,int y){
int asum=0;
for(int i=0;i<x;i++){
for(int j=0;j<y;j++){
asum+=t[i][j];
}
}
return asum;
}
int main()
{
int x=2;
int y=3;
int a[x][y];
for(int i=0;i<x;i++){
for(int j=0;j<y;j++){
a[i][j]=0;
}
}
a[0][1]=7;
a[1][1]=9;
int *p[x];//这里x与二维数组行数相同,因为指针数组的每个指针指向的是二维数组的每一行
for(int i=0;i<x;i++){
p[i]=&a[i][0];//可以改成a[i]
}
int **t=p;
cout<<arraysum(t,x,y);
return 0;
}
结果为:16
或者不用二级指针t,函数arraysum的第一个参数改为指针数组int *p[],同样也能实现二维数组传参的功能。
结果为:16