c++ primer plus复合类型之结构简介

数组可以存储多个元素,但是所有的元素类型必须相同。结构是一种比数组灵活的数据格式,因为同一个结构可以存储多种类型的数据。结构是用户自定义的类型,而结构声明定义了这种类型的数据属性。定义了数据类型之后,便可以创建这种类型的变量了。创建结构包括两步:首先,定义结构描述——它描述并标记了能够存储在结构中的各种数据类型,然后,按照描述创建结构变量。

1:创建结构体类型

例如:

struct inflatable 
{
	char name[20];
	float volume;
	double price;
};
关键字struct声明这是一个结构。标识符inflatable是这种数据格式的名称,因此新类型的名称为inflatable。这样,便可以像创建int或float变量那样 创建inflatable类型的变量了。接下来,大括号中包括了结构存储的数据类型的列表。列表中的每一项都被称为结构成员。因此,inflatable 结构中有三个成员。总之,结构定义指出了新类型(即inflatable)的特征 

2:创建结构体变量以及访问结构体成员

c++允许在声明结构变量时省略关键字struct ,与基本类型名用法相同,例如

inflatable hat;
inflatable vincent;
由于hat类型为inflatable,因此可以使用成员运算符(.)来访问各个成员,例如,hat.price指的是price成员。
3:结构声明的位置很重要 ,可以将声明放在main()函数中,另一种选择是将声明放在main()的前面。

4:结构的初始化

c++支持将列表初始化用于结构,且等号是可选的,比如

inflatable goose {"Daphne",0.12,29.99};
其次,如果大括号内未包含任何东西,各个成员将被设置为零。

5:结构可以将string类作为成员

只要使用的编译器支持对以string对象作为成员的结构进行初始化,结构中就可以包含string对象,比如

struct inflatable 
{
	string name;
	float volume;
	double price;
};
6:结构的其他属性——结构赋值

#include <iostream>
#include <string>//使得string类有效
using namespace std;
struct inflatable 
{
	string name;
	float volume;
	double price;
};
int main()
{
	inflatable goose =
	{
		"Daphne",0.12,29.99
	};
	inflatable choice;

	cout<<"goose:"<<goose.name<<" for $";
	cout<<goose.price<<endl;

	choice=goose;
	cout<<"choice:"<<choice.name<<" for $";
	cout<<choice.price<<endl;

	return 0;
} 

输出结果:goose:Daphne for $29.99

choice:Daphne for $29.99

7:结构数组

如前所述,inflatable结构中可以包含数组元素,进一步我们可以创建元素为结构的数组。方法和创建基本类型数组一样。例如,创建一个含100个ingflatable结构的数组,可以这样做:

inflatable gifts[100];

这样,gifts就是一个inflatable数组,每个元素(如gifts[1]或gifts[99])都是inflatable对象,可以与成员运算符一起使用

gifts本身是一个数组,而不是结构,因此gifts.price的表述是无用的。
初始化结构数组:可以结合使用初始化数组的规则(逗号分隔每个元素值,并将这些值用花括号括起来)和初始化结构(逗号分隔每个元素值,并将这些值用花括号括起来)的规则。例如,

inflatable gifts[2]=
{
    {"Mary",1.2,3.54},
    {"Tom",3.2,5.6}
};


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值