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

mac2024-04-02  45

1.源代码

// some type combinations #include <iostream> 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.运行结果

最新回复(0)