如下代码:
#include <iostream>
struct MyStruct {
int year;
};
using namespace std;
int main(int argc, const char * argv[]) {
MyStruct ms1,ms2,ms3;
ms1.year = 1998;
MyStruct *pa = &ms2;
pa->year = 1999;
MyStruct msArray[3];
msArray[0].year = 2000;
(msArray + 1)->year = 2008;
const MyStruct *msArp[3] = {&ms1,&ms2,&ms3};
cout << msArp[1]->year << endl;
const MyStruct **msPpa = msArp;
auto msppb = msArp;
cout << msPpa[0]->year << endl;
cout << (*msPpa)->year << endl;
cout << (*(msppb + 1))->year << endl;
return 0;
}
说明:
1.pa是一个指针地址,指向结构体对象ms2,所以可通过pa->year或(****pa).year来访问结构体的成员year;
2.msArray是一个结构体数组,msArray[0]是一个结构体对象,msArray[0].year是结构体的成员;由于数组名是一个指针,指向数组第一个元素的地址,所以我们可以使用指针运算,如:(msArray + 1)->year来访问数组元素的成员;
3.msArp是一个指针数组,数组元素为结构体对象的指针地址,所以我们可以通过箭头运算符来访问结构体成员,即msArp[1]->year或者(msArp)->year
4.由于msArp数组名是一个指针,指向数组第一个元素(结构体)的地址,所以由下:
const MyStruct** ****msPpa = msArp;
msPpa是一个指向结构体指针(数组第一个元素为一个结构体指针)的指针,所以msPpa是一个结构体指针,*msPpa是一个结构体对象