结构定义的一般格式如下:
结构类型的定义必须以关键字struct开始,后跟用户命名的有效的C++标识符作为结构类型名。
如果结构的定义包括参数<结构类型名>(可选),该参数即成为一个与该结构等价的有效的类型名称。即可以用它定义此结构类型变量。
<结构变量名>为可选参数,是一个或多个具体结构变量的标识。在花括号“{}”内是组成这一结构的各个元素的类型和标识。
如用来描述上面提到的学生信息,可通过定义如下结构类型来完成。
这里首先定义了结构类型student,它包含4个数据成员(域):code、name、sex和score,每个域具有不同的数据类型。
其次,用这个结构类型的名称student声明了3个该类型的变量(对象):stu1、stu2和stu3。
一旦被定义,student就成为一个新的有效数据类型名称,可以像其他基本数据类型一样,如int、char或float,被用来声明该数据类型的对象(变量)。
在结构定义的结尾可以加可选项<结构变量名>,它的作用是直接声明该结构类型的变量(对象)。例如,也可以这样声明上述的结构对象stu1、stu2和stu3:
说明:(www.xing528.com)
(1)如上例,如果在定义结构的同时声明了结构的对象,参数<结构类型名>(本例中的student)将变为可选项。但是如果没有结构名student,就不能在后面的程序中用它来声明更多此结构类型的对象了。
(2)左右花括号之间所定义的结构成员部分称为结构体,<成员类型名i>(i=1,2,…n)用来定义该结构所包含的数据成员的数据类型,每一种数据类型必须是一种已有的数据类型。<成员i>(i=1,2,…n)为用户命名的有效的C++标识符作为该类型的数据成员名。
当结构成员的数据类型为所定义的该结构本身类型时,只能是该结构的指针类型,而不能是该结构的直接成员。例如:
在上面的结构定义中,p为指向结构本身的指针类型,这是允许的。但不能定义成aaa p的形式。因为这种递归嵌套定义,将无法确定它的对象所需占用存储空间的大小。
(3)当多个数据成员具有同一种数据类型时,可用一个成员类型名定义,但各成员名之间应用逗号分开,在结束类型成员的定义后,要用分号结束。
(4)当一个结构类型定义在函数之外时,它具有文件作用域;当定义在一对花括号之内时,其作用域范围是该括号所构成的块,即它具有局部作用域。在程序中同一作用域内不允许出现相同的类型标识符或其他同名量,但在不同的作用域内用户类型名可以重复。
如类型aaa的作用域为文件作用域,但在一个函数中又用标识符aaa定义了另一个类型,则后者的作用域局限在这个函数中,文件作用域类型aaa在这个函数内部被局部类型aaa所屏蔽,是不可见的,而在该函数之外的所有地方有效,即为可见的。
(5)声明一个结构并不分配内存,内存分配是在定义这个结构类型的变量时进行的。
(6)一个结构变量所占内存是该结构体中所有成员各自所占存储空间的总和。如在前例中,设int型占2 byte,char型占1 byte,bool型占1 byte,float型占4 byte,则结构student的对象stu1、stu2、stu3分别占用2+1∗10+1+4=17byte。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。