c++入门005 结构体

本文详细介绍了结构体的基础概念,包括定义、初始化及赋值方法。解释了结构体如何存储不同类型的数据,以及如何通过成员操作符访问这些数据。还讨论了结构体在函数中的应用,结构数组的创建与初始化,以及结构体中位字段的使用。

结构体的定义、初始化和赋值一定要搞明白。

记住初始化和赋值的概念是不一样的。

____________________________________________________________________________________________________________________________

 

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)
...

 

字位段通常用在低级编程中。
 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值