写在开头:结构体相对于数组的区别:
虽然数组可以储存多个元素,但是数组中所有元素的类型必须相同,在实际生活中,有可能需要存储不同类型的用户信息,因此,我们引入了结构体,用来存储多种数据类型。
举一个简单的例子:
struct inflatable
{
char name[20];
float volume;
double price;
};
结构体变量的访问:
- 使用成员运算符(.)来访问各个成员。
如下代码:
#include<iostream>
using namespace std;
struct inflatable
{
char name[20];
float volume;
double price;
};
int main()
{
inflatable guest =
{
"Cloorious Gloria",
1.88,
29.99
};
inflatable pal =
{
"Audacious Arthur",
3.12,
32.99
};
cout << "Expand your guest list with " << guest.name << " and " << pal.name << endl;
cout << "You can have both for " << guest.price + pal.price<< endl;
return 0;
}
对于局部结构体和全局结构体有:
注意:
- struct结构体可以使用string类作为成员。
另外,可以将结构体作为参数传递给函数,也可以让函数返回一个结构体。同时,还可以使用赋值运算符(=)将结构赋给另一个同类型的结构,这样结构体中每个成员都有将被赋值给另一个结构中相应成员的值,即使成员是数组。这种赋值被称为成员赋值。
如下代码:
#include<iostream>
using namespace std;
struct inflatable
{
char name[20];
float volume;
double price;
};
int main()
{
inflatable bouquet =
{
"sunflowers",
0.2,
12.49
};
inflatable choice;
cout << "bouquet: " << bouquet.name << " for $ " << bouquet.price << endl;
choice = bouquet;
cout << "choice: " << choice.name << " for $ " << choice.price << endl;
return 0;
}
由此可看出:
由于choice结构的成员值与bouquet结构中的存储值相同,因此,因此可以同时完成定义结构和创建结构的工作。
如下代码:
struct inflatable
{
char name[20];
float volume;
double price;
}choice,bouquet;
另外,还可以声明没有名称的结构体变量,例如:
struct
{
int x;
int y;
}position;
这样可以创建一个名为position的结构变量,可以使用position.x来访问成员x,但这种类型没有名称,因此以后无法创建这种类型变量。
2.结构数组。
例如:
inflatable gift[100];
gift将是一个inflata数组,其中的每个元素都是inflata对象,可以与成员运算符一起访问。
例如:
cin>>gift[0].volume;
cout<<gift[99].price<<endl;
初始化结构体数组的方法:
inflatable guests[2]=
{
{"Bambi",0.5,21.99},
{"Godzilla",2000,565.99}
};
如下代码:
#include<iostream>
using namespace std;
struct inflatable
{
char name[20];
float volume;
double price;
};
int main()
{
inflatable guests[2] =
{
{"Bambi",0.5,21.99},
{"Godzilla",2000,565.99}
};
cout << "The guests " << guests[0].name << " and " << guests[1].name << " have a combined volume of "
<< guests[0].volume + guests[1].volume << " cubic feet." << endl;
return 0;
}