C++ Primer Plus(第6版)第4章 程序清单4.23改编

1.源代码

// some type combinations
#include 

struct antarctica_years_end
{
    int year;
};

using namespace std;

int main()
{
    antarctica_years_end s01, s02, s03; /** 创建结构变量 */
    s01.year = 1998;    /** 使用成员运算符访问其成员 */

    antarctica_years_end * pa = &s02;   /** 创建指向这种结构的指针 */
    pa->year = 1999;    /** 将指针设置为有效地址后,就可以使用间接成员运算符访问成员 */

    antarctica_years_end * pb = &s03;   /** 创建指向这种结构的指针 */
    (*pb).year = 2000;    /** 指针pb指向结构s03,即pb存储的值是结构s03的地址&s03(即pb = &s03),所以(*pb)相当于结构s03本身(即*pb = s03) */

    antarctica_years_end trio[3];   // array of 3 structures
                                    /** 创建结构数组,数组的每一个元素是结构 */
    trio[0].year = 2003;    // trio[0] is a structure
                            /** trio是一个数组,trio[0]是一个结构,而 trio[0].year 是该结构的一个成员 */
    trio[1].year = 2004;
    cout << "trio[0].year : " << trio[0].year << endl;
    cout << "trio->year : " << trio->year << endl << endl;/** 由于数组名是一个指针,因此也可以使用间接成员运算符 */
    cout << "trio[1].year : " << trio[1].year << endl;
    cout << "(trio+1)->year : " << (trio+1)->year << endl << endl << endl;/** 由于数组名是一个指针,因此也可以使用间接成员运算符 */

    const antarctica_years_end * arp[3] = {&s01, &s02, &s03};   /** 创建指针数组,数组的每一个元素是指针,而该指针指向一个结构 */
    cout << "arp[1]->year : " << arp[1]->year << endl;   /** 既然arp是一个指针数组,arp[1]就是一个指针,可将间接成员运算符应用于它,以访问成员 */
    cout << "(*arp[1]).year : " << (*arp[1]).year << endl << endl << endl; /** 既然arp[1]就是一个指向结构的指针,则(*arp[1]).year就是结构本身 */

    const antarctica_years_end ** ppa = arp;    /** 创建指向指针数组的指针,
                                                    其中arp是一个数组的名称,因此它是第一个元素的地址,
                                                    但其第一个元素为指针,该指针指向一个结构,
                                                    因此ppa是一个指针,指向一个指向结构名为antarctica_years_end结构的指针 */
    auto ppb = arp; // C++11 automatic type deduction
    // or else use const antarctica_years_end ** ppb = arp;
    cout << "(*ppa)->year : " << (*ppa)->year << endl;   /**  ppa是一个指向结构指针的指针,因此 *ppa 是一个结构指针,可将间接成员运算符应用于它 */
    cout << "(**ppa).year : " << (**ppa).year << endl << endl;   /**  既然*ppa 是一个结构指针,那么 **ppa 就是该结构本身,则可以使用成员运算符访问其成员 */
    cout << "(*(ppb+1))->year : " << (*(ppb+1))->year << endl;
    cout << "(*(ppb+2))->year : " << (*(ppb+2))->year << endl;

    return 0;
}


2.运行结果

C++ Primer Plus(第6版)第4章 程序清单4.23改编_第1张图片

你可能感兴趣的:(c++学习)