C++初学(12补充)

12、类型组合

#include 
struct antarctica_years_end
{
	int year;
};
int main()
{   
	using namespace std;
	antarctica_years_end s01, s02, s03;
	s01.year = 1998;
	antarctica_years_end* pa = &s02;
	pa->year = 1999;
	antarctica_years_end trio[3];
	trio[0].year = 2003;
	cout << trio->year << endl;
	const antarctica_years_end* arp[3] = { &s01,&s02,&s03 };
	cout << arp[1]->year << endl;
	const antarctica_years_end * *ppa = arp;
	auto ppb = arp;
	cout << (*ppa)->year << endl;
	cout << (*(ppb + 1))->year << endl;
	return 0;
}

C++初学(12补充)_第1张图片

下面解析一下这段程序:

刚开始我们创建了类型为antarctica_years_end的结构,并且创建了这种类型的变量s01,s02,s03。

然后使用成员运算符访问其成员:

s01.year = 1998;

我们可以创建指向这种类型的指针:

antarctica_years_end* pa = &s02;

将该指针设置为有效地址后,就可以使用间接成员运算符来访问成员:

pa->year = 1999;

 可以创建名为trio的结构数组:

antarctica_years_end trio[3];

然后可以使用成员运算符访问元素的成员:

trio[0].year = 2003;

其中trio是一个数组,trio[0]是一个结构,而trio[0].year是该结构的一个成员。由于数组名是一个指针,因此也可以使用间接成员运算符:

(trio+1)->year=2003;

可创建指针数组:

const antarctica_years_end* arp[3] = { &s01,&s02,&s03 };

arp是一个指针数组,arp[1]就是一个指针,可以将间接成员运算符应用于它,以访问成员:

cout << arp[1]->year << endl;

可创建指向上述数组的指针:

const antarctica_years_end * *ppa = arp;

其中arp是一个数组的名称,因此它是第一个元素的地址。但其第一个元素是指针,因此ppa是一个指针,指向const antarctica_years_end的指针。这种声明很容易混淆,下面便给出了C++版本的auto提供的方便。编译器知道arp的类型,能够正确地推断出ppb的类型:

auto ppb = arp;

由于ppa是一个指向结构指针的指针,因此*ppa是一个结构指针,可将间接成员运算符应用于它:

cout << (*ppa)->year << endl;
	cout << (*(ppb + 1))->year << endl;

由于ppa指向arp的第一个元素,因此*ppa为第一个元素,即&s02。因此(*ppa)->year为s01的year成员。第二个语句中,ppb+1指向下一个元素arp[1],即&s02。C++初学(12补充)_第2张图片

你可能感兴趣的:(c++,c++,java,开发语言)