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;
}