【C++ Primer Plus学习记录】类型组合——数组、结构、指针

本章介绍了数组、结构、指针。可以各种方式组合它们,下面介绍其中的一些。

从结构开始:

struct antarctica_years_end
{
   int year;
};

可以创建这种类型的变量:

antarctica_years_end s01,s02,s03;  //s01,02,s03是结构

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

s01.year = 1998;

可以创建指向这种结构的指针:

antarctica_years_end *pa = &s02;

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

pa -> year = 1999;

可以创建结构数组:

antarctica_years_end trio[3];

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

trio[0].year = 2003;  //trio[0]是一个结构

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

(trio + 1) -> year = 2004;

可以创建指针数组:

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

如何使用该数组来访问数据呢?既然arp是一个指针数组,arp[1]就是一个指针,可以将间接成员运算符应用于它,以访问成员:

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

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

const antarctica_years_end **ppa = arp;

其中,arp是一个数组的名称,因此它是第一个元素的地址。但其第一个元素为指针,因此ppa是一个指针,指向一个指向antarctica_years_end的指针。如何使用ppa来访问数据呢?由于ppa是一个指向结构指针的指针,因此*ppa是一个结构指针,可将间接成员运算符应用于它:

std::cout << (*ppa) -> year << std::endl;

由于ppa指向arp的第一个元素,因此*ppa为第一个元素,即&s01。所以,(*ppa)->year为s01的year成员。

//4.23将上述语句放到一个简单的程序里
#if 1
#include
using namespace std;

struct antarctica_years_end
{
	int year;
};

int main()
{
	antarctica_years_end s01, s02, s03;//创建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;//trio是一个数组,trio[0]是一个结构,而trio[0].year是该结构的一个成员。
	std::cout << trio->year << std::endl;//数组名是一个指针,因此可以使用间接成员运算符

	const antarctica_years_end *arp[3] = { &s01, &s02, &s03 };//创建指针数组
	std::cout << arp[1]->year << std::endl;//arp是一个数组,arp[1]就是一个指针
	
	//创建指向上述数组的指针,arp是数组名称,因此它是第一个元素的地址。
	//但其第一个元素为指针,因此ppa是一个指向结构指针的指针.,因此*ppa是一个结构指针
	const antarctica_years_end **ppa = arp;
	auto ppb = arp;//C++11自动类型判断
	std::cout << (*ppa)->year << std::endl;//由于ppa指向arp的第一个元素,因此*ppa为第一个元素,即&s01。
	std::cout << (*(ppb + 1))->year << std::endl;

	system("pause");
	return 0;
}
#endif

你可能感兴趣的:(c++,学习,开发语言,软件工程,visualstudio,数据库)