#include <iostream>;
using namespace std;
int main()
{
char a[2][2] = { { 'a', 'b' },{ 'c', 'd' } };
char(*p)[2] = a;
//这里的2指的是a的列数,假如是a[2][3],那么应该定义为char(*p)[3] = a;
cout << "*p:" << (int *)p<< endl;
//由于p是char型指针,用cout输出*p结果会是整个字符串,因此必须强制转化为其他指针,例如void *, int *,float *, double * 等
cout << "p:" << p << endl;//和(int *)p一样,指向a中第一个元素的位置
cout << "(*p)[0]:" << (*p)[0] << '\n';
//读取方式按行读取,也就是一行读取完再读下一行。输出数组a中第一行中第一个元素:a
cout << "(*p)[1]:"<< (*p)[1] << '\n';//输出数组a第一行中第二个元素:b
cout << "(*p)[2]:" << (*p)[2] << '\n';//输出数组a第二行中第一个元素:c
cout << "(*p)[3]:" << (*p)[3] << '\n';//输出数组a第二行中第二个元素:d
cout << "*(*p):"<< *(*p)<<endl;
//*p是指针,指向数组a的第一个元素的位置。*(*p)取的是数组数组a的第一个元素a
cout << "*(*(p + 1)):" << *(*(p + 1)) << endl;
//在p上移动是按行移动,*(p + 1)是指向数组a的第二行第一列的位置,*(*(p + 1))取值为c
p++;//p++和++p的区别,a=p++代表a=p,p=p+1;a=++p代表a=p+1,p=p+1。故这里p指向了b的位置
cout << "*(*p + 1) :" << *(*p + 1) << endl;
//在*p上移动是按列移动,(*p + 1)是指向数组a的第二行第二列的位置,*(*p + 1)取值为d
while (1);
}
运行结果:
*p:004FFC78
p:004FFC78
(*p)[0]:a
(*p)[1]:b
(*p)[2]:c
(*p)[3]:d
*(*p):a
*(*(p + 1)):c
*(*p + 1) :d