5.3.2 共用体数组的声明和初始化
共用体数组的用法与结构数组的用法几乎一致,唯一的不同之处在于对数组元素进行初始化时,只能对共用体存储变量列表中的一个成员赋值。
共用体数组声明形式如下所示。
共用体类型名共用体数组名[元素个数];以代码5.4中的共用体comUnion为例,下列语句就声明了一个大小为5的共用体数组sz,数组中的每个元素都是comUnion型的结构变量。 comUnion sz[5];
与结构数组类似,共用体数组既可以在声明数组的同时对元素初始化,又可以在数组建立完毕后,对元素进行赋值。
(1)先建立共用体数组,后对元素进行赋值。
comUnion com[3]; comUnion comTemp={"Dell"};//注:只能对一个成员变量初始化 for(int i=0;i<3;i++) com[i]=comTemp;(2)在声明结构数组的同时对元素初始化。 comUnion com[3]={{"Dell"},{"Lenovo"},{"Acer"}};//注:只能对一个成员变量初始化下列用法仍然是不合法的。 comUnion comTemp={"Dell"};//注:只能对一个成员变量初始化 comUnion com[3]={comTemp,comTemp,comTemp};在声明结构数组时,也可以不指定数组元素的个数,如下所示。 comUnion com[]={{"Dell"},{"Lenovo"},{"Acer"}};//注:只能对一个成员变量初始化
编译器会根据给出的初值个数来确定数组元素的个数。
注意
同样可以声明二维共用体数组或多维共用体数组。
可以将共用体定义、共用体数组的声明及其初始化放在一起来完成,如下所示。
union comUnion { char brand[10]; float price; }com[3]={{"Dell"},{"Lenovo"},{"Acer"}};
注意
和普通数组一样,C++不提供结构数组和共用体数组的越界检查机制,所以,程序员应掌握数组下标的取值,避免越界。