4.8.2数组指针和指针数组
(1)数组指针
顾名思义,就是指向数组的指针,因此表示的是一个指针,这个指针指向一个数组,例如:int (*p)[],这里p就是指向了一个8个int型元素的数组。
#include<iostream>
#include<stdio.h>
using namespace std;
void main()
{
int (*p)[4];
int a[3][4] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 0, 1, 2, 3 } };
cout << a[0] << endl; //0095FA6C
cout << a[0][0] << endl;//1
p = &a[0];
cout << p << endl; //0095FA6C
cout << *p << endl;//0095FA6C
for (int i = 0; i < 8; i++)
{
cout << (p)[i] << " ";
cout << (*p)[i] << " ";
}
}
循环体中的结果分别是0095FA6C 1, 0095FA7C 2,0095FA8C 3,0095FA9C 4,…
注意到一开始p和*p都等于0095FA6C的指针,而(p)[i]依次是按四位递增的指针,p一开始指向数组首地址,(*p)[i]是依次是按一位递增指针指向的数组元素,*p一开始指向数组第一个元素的地址。具体过程见下图:
(2)指针数组
就更简单了,就是指针的数组,表示一个指针,包含的元素是指针,就像你定义一个整型数组,包含的是整型数据一样。例如:int* p[8],这里p是一个包含8个int型指针的数组。