好久不用C++,今天遇到数组指针又迷糊了,感觉复习一波并记录下来
数组引用
定义一个4x3的数组:
int arr[4][3] = { 0,11,22,33,44,55,66,77,88,1,2,3 };
定义对数组的引用:ref是一个大小为3的数组,是对a[0]的引用;
int(&ref)[3] = arr[0];
若想对整个arr引用,在定义引用时则创建二维数组:
int(&ref)[4][3] = arr;
指针数组&数组指针
指针数组
指针数组比较简单,定义方式为
int arr[4][3] = { 0,11,22,33,44,55,66,77,88,1,2,3 };
int* p1[4];
从右往左看,首先他是一个大小为4的数组,再往前看他存放的是int类型的指针,这样就比较好理解
for (int i=0;i<4;i++)
{
p1[i] = arr[i]+1;
cout << *p1[i]<< endl;
}
将arr数组的每一行的第2个元素的地址赋值到p1,然后输出
数组指针
数组指针的定义和函数指针的定义相似
int(*p2)[3];
从内往外看,先看括号里他是一个指针,观察右边发现他是指向一个大小为10的数组,往左看,数组中的元素为int,p2就是指向一个大小为3的int型数组的指针。
赋值时把数组的地址传给指针:
p2 = &arr[0];
这里arr[0]和&arr[0]的值是一样的,但是需要传的是&arr[0],arr[0]是数组第一个元素的地址,而&arr[0]是第一个数组的地址。
*p2得到的是数组的首地址,之后可以按照数组的访问方式读取数组元素。
还可以通过p2访问到数组的其他元素
让p2指向二维数组的第2个数组
p2 = &arr[1];
p2[-1]指向第一个数组,p2[1]指向第三个数组,p2[2]指向第四个数组。其实利用的还是数组的连续性。