类型组合

如下代码:
#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是一个结构体对象

推荐阅读更多精彩内容