问题通俗描述是这样的:
怎么定义一个数组,数组里为指向其他数组的指针,其他数组又是指针的数组。
通过查阅资料,了解到
指针数组:元素均为指针的数组。 定义方式为:int *p[n];
于是,这个问题我的理解是:
怎么定义指针数组的指针数组。
理解如图所示:
分析后
所得代码如下:
int a = 1;
int b = 2;
int *pa = &a;
int *pb = &b;
int *p[2] = {pa,pb}; //指针数组
int a1 = 10;
int b1 = 20;
int c1 = 30;
int *pa1 = &a1;
int *pb1 = &b1;
int *pc1 = &c1;
int *p1[3] = {pa1,pb1,pc1}; //指针数组
int **pp[2] = {p,p1}; //指针数组的指针数组
cout<<*pp[1][2]<<endl; //输出指针数组的某个元素
cout<<*pp[0][0]<<endl;
结果:
2、
另解:
int *(*readMsg[10])[7]
比较后可得:
此写法相当于二维数组,行和列固定,不容易访问时越界。1中的写法行数固定,列不固定,更加灵活但不易掌控。
3、
通过这次的查阅资料,对指针和数组的理解又加深了,特别是数组和指针一起出现需要几个*,以前一直没搞懂过。
现在大约明白了:
A[]相当于A为指向数组首地址的指针,对应一个*。
int **pp[2] = {p,p1};
这里使用了两个[][](p,p1的[]算在内),所以需要两个*啦!
cout<<*pp[1][2]<<endl;
因为[]的优先级比*高,所以这里取了位于pp[1][2]的指针元素,需要一个*