学校网站开发程序,广告设计专业技能有哪些,湖南衡阳市建设工程造价网站,wordpress手机不显示图片9.1、结构简介
虽然数组能够和存储多个元素#xff0c;但所有元素必须相同#xff0c;也就是说#xff0c;同一个数组不能既存放int类型也存放float类型#xff0c;而C的结构可以满足要求。结构是一种比数组更灵活的数据格式#xff0c;因为同一个结构可以存储多种类型的…9.1、结构简介
虽然数组能够和存储多个元素但所有元素必须相同也就是说同一个数组不能既存放int类型也存放float类型而C的结构可以满足要求。结构是一种比数组更灵活的数据格式因为同一个结构可以存储多种类型的数据。
下面给个结构
struct inflatable
{char name[20];float volume;double price;
};
关键字struct表明这些代码定义的是一个结构。标识符inflatable是这种数据格式的名称因次新类型的名称为inflatable。这样就可以像创建char或int类型那样创建inflatable类型的变量。该结构里面的char数组、一个float和一个double每一项都被称为结构成员。
inflatable hat;
inflatable woopie_cushion;
inflatable mainframe;
C允许在声明变量中时省略关键字struct在C中结构标记的用法与基本类型名相同。
由于hat的类型是inflatable因此可以用成员运算符.来访问各个成员。hat是一个结构hat.price是一个double类型的变量可以通过成员名来访问结构的成员。
9.1.1、在程序中使用结构
下面给一个程序
#include iostream
struct inflatable
{char name[20];float volume;double price;
};int main()
{using namespace std;inflatable guest {Glorious Gloria,1.88,29.99};inflatable pal {Audacious Arthur,3.12,32.99};cout Expand your guest list with guest.name;cout and pal.name ! endl;cout You can have both for $;cout guest.price pal.price ! endl;return 0;
} 结构声明的位置很重要。对于程序来说有两种选择。一种是将声明放在main函数中紧跟在开始括号的后面另一种选择是将声明放到main的前面。
该程序用的是第二种被称为外部声明当然还有一种说法是全局声明。第一种则被称为内部声明。两者来说差别挺大的外部声明可以被其后面的任意函数使用而内部声明只能被该声明所属的函数使用。因此我们一般用外部声明。
结构的初始化方式
inflatable guest
{Glorious Gloria,1.88,29.99
};
和数组一样使用有逗号分隔值列表并将这些值用花括号括起。在该程序中每个值占一行但也可以将它们全部放到同一行中。只是应用逗号将它们分开
inflatable duck{Daphne,0.12,9.98};
9.1.2、C11结构初始化
与数组一样C也支持将列表初始化用于结构且等号是可选的
inflatable duck{Daphne,0.12,9.98};
如果大括号内没有任何东西各个成员都将被设置为0。
9.1.3、结构可以将string类作为成员吗
答案是可以的。一定要让结构定义能够访问名称空间std。可以将using namespace std放到结构初始化前面或者将name的类型声明为std::string。
9.1.4、其他结构属性
C可以将结构作为参数传递给函数也可以让函数返回一个结构。另外还可以使用赋值运算符将结构赋给另一个同类型的结构这样结构中每个成员都被设置为另一个结构中相应成员的值即使成员是数组。这种赋值被称为成员赋值。
下面给一段代码
#include iostream
struct inflatable
{char name[20];float volume;double price;
};
int main()
{using namespace std;inflatable bouquet {sunflowers,0.20,12.49};inflatable choice;cout bouquet: bouquet.name for $;cout bouquet.price endl;choice bouquet;cout choice: choice.name for $;cout choice.price endl;return 0;
} 从中可以看出成员赋值是有效的因为choice结构的成员值和bouquet结构中的值相同。
如果需要同时完成定义结构和创建结构变量的工作只需要将变量名放在结束括号的后面即可
struct perks
{int key_number;char car[10];
}my_smith,my_opinion;
然而将结构变量和变量声明分开可以使程序更易于阅读和理解。C语言介绍结构体时应该会教一下创建单独的结构变量后面可能不会这么创建。
9.1.5、结构数组
inflatable结构包含一个数组当然我们也可以创建元素为结构的数组方法和创建基本类型数组完全相同。例如
inflatable gifts[100];
这样gifts将是一个inflatable数组其中的每个元素都是inflatable对象可以与成员运算符一起使用
cingifts[0].volume;
coutgifts[99].priceendl;
注意gifts是一个数组不是结构不是结构不是结构因此gifts.price是无效的。
要初始化结构数组可以使用初始化数组的规则和初始化结构的规则。由于数组中的每个元素都是结构因此可以使用结构初始化的方式来提供它的值。
inflatable guests[2]
{{Bambi,0.5,21.99};{Godzilla,2000,565.99};
};
#include iostream
struct inflatable
{char name[20];float voulume;double price;
};
int main()
{using namespace std;inflatable guests[2] {{Bambi,0.5,21.99},{Godzilla,2000,565.99}};cout The guests guests[0].name and guests[1].name \nhave a combined volume of guests[0].voulume guests[1].voulume cubic feet. endl;return 0;
} 9.1.6、结构中的为字段
C允许指定占用特定位数的结构成员这使得创建与某个硬件设备上的寄存器对应的数据结构非常方便。字段的类型应为整型或枚举接下来是冒号冒号后面是一个数字它指定了使用的位数。每个成员都被称为位字段。下面是一个例子
struct torgle_register
{unsigned int SN:4;unsigned int :4;bool goodIn:1;bool goodTorgle:1;
};