结构体的定义、初始化和赋值一定要搞明白。
记住初始化和赋值的概念是不一样的。
____________________________________________________________________________________________________________________________
1.结构体简介
结构是一种比数组更灵活的数据格式。同一个结构可以存储多种不同类型的数据。
例:定义:
struct inflatable
{
char name[20];
float volume;
double price;
};
可以将inflatable当作一个变异的基本类型,它申明结构的方式和类型申明变量的方式基本相同。
inflatable hat;
由于hat的类型为inflatable,因此可以使用成员操作符(.)来访问各个成员。如:hat.volume指的是结构的volume成员,相当于double类型的变量。
在某些编译器中,结构体还可以将string对象作为成员的类型定义。如果不支持可以使用str::string来定义。如:string name;
1.结构初始化
inflatable guest =
{
"Glorious Gloria",
1.88,
29.99
};
//
inflatable duck ={"Daphne",0.12,9.98};
和数组一样 使用逗号分隔,并将这些值用花括号括起。
c语言不能像这样初始化,它必须在前面加入struct。
struct inflatable guest{....};
2.结构赋值
第一种:使用memset对结构体变量进行闲置操作
//按照编译器默认的方式进行初始化(如果a是全局静态存储区的变量,默认初始化为0,如果是栈上的局部变量,默认初始化为随机值)
inflatable a;
memset(&a,0,sizeof(a));
第二种:依次给每一个结构体成员变量进行赋值
inflatable a;
a.b=1;
a.c=2;
第三种:使用已有的结构体变量给另一个结构体变量赋值。也就是说结构体变量之间是可以相互赋值的
inflatable a={1,2};
struct A aa;
aa=a; //将已有的结构体变量付给aa
2.结构的其他应用
c++使用户定义的类型与内置类型尽可能相似。例如,可以将结构作为参数传递给函数,也可以让函数返回一个结构。另外,还可以使用赋值操作符(=)将结构赋给同一个类型的结构。这样结构中每个成员都将被设置为另一个结构中相对成员的值,即使成员是数组。
inflatable Yang;
Yang=guest;
还可以同时完成定义结构和创造结构变量的工作。甚至可以初始化这种方式的变量。
struct perks
{
int key_number;
char car[12];
}mr_glitz=
{
7,"Packard"};
3.结构数组
例:要创造一个包含100个inflatable结构的数组。
inflatable gifts[100];
gifts本身是一个数组,而不是结构。其中的每个元素都是inflatable对象,可以与成员操作符一起使用。
cin>>gifts[0].volume;
cout<<gifts[99].price<<endl;
初始化结构数组
inflatable guests[2]=
{
{"Bambi",0.5,21.99},
{"Godzilla",2000,565.99}
};
4.结构中的位字段
c++像c一样 允许指定占用特定位数的结构成员,这使得创建与某个硬件设备上的寄存器对应的数据结构 非常方便。
字段的类型应该为整型或枚举,接下去是冒号,冒号后面是一个数字,它指定了使用的位数。可以使用没有名称的字段来提供间距。每个成员都被称为位字段。如:
struct torgle_register
{
unsigned int SN:4;
unsigned int :4;
bool goodIn:1;
bool goodTorgle:1;
};
可以想通常那样初始化这些字段,还可以使用标准的结构表示法来访问位字段:
torgle_register tr ={14,true,false};
...
if(tr.goodIn)
...
字位段通常用在低级编程中。