data
type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
在C语言中,定义一个结构的一般形式为:
struct结构名
{
//成员表列
}
成员表由若干个成员组成, 每个成员都是该结构的一个组成部分。对每个成员也必须作类型说明,其形式为:“类型说明符 成员名”。成员名的命名应符合标识符的书写规定。例如:
struct stu
{
int num
char name[20]
char sex
float score
}
在这个结构定义中,结构名为stu,该结构由4个成员组成。 第一个成员为num,整型变量;第二个成员为name,字符型数组;第三个成员为sex,字符型变量;第四个成员为score,浮点型变量。 应注意在括号后的分号是必不可少的。
然后,当结构定义完成后,即创建了一种数据类型,可以像int、float等内置类型一样使用,以上面定义的stu结构体来和int类型对比着看。
int a//定义一个int类型的变量a
stu a//定义一个stu类型的变量a
int *p//定义一个int类型的指针p
stu *p//定义一个stu类型的指针p
int a[10]//定义一个int类型的数组a,它有10个元素,每个元素是int类型
stu a[10]//定义一个stu类型的数组a,它有10个元素,每个元素是stu类型。
在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
C++提供了许多种基本的数据类型(如int、float、double、char等)供用户使用。但是由于程序需要处理的问题往往比较复杂,而且呈多样化,已有的数据类型显得不能满足使用要求。因此C++允许用户根据需要自己声明一些类型,用户可以自己声明的类型还有结构体类型(structure)、共用体类型(union)、枚举类型(enumeration)、类类型(class )等,这些统称为用户自定义类型(user-defined type,UDT)。
在一个组合项中包含若干个类型不同(当然也可以相同)的数据项。C和C++允许用户自己指定这样一种数据类型,它称为结构体。它相当于其他高级语言中的记录(record)。例如,可以通过下面的声明来建立数据类型。
struct Student//声明一个结构体类型Student
{
int num//包括一个整型变量num
char name[20]//包括一个字符数组name,可以容纳20个字符
char sex//包括一个字符变量sex
int age//包括一个整型变量age
float score//包括一个单精度型变量
char addr[30]//包括一个字符数组addr,可以容纳30个字符
}//最后有一个分号
这样,程序设计者就声明了一个新的结构体类型Student(struct是声明结构体类型时所必须使用的关键字,不能省略),它向编译系统声明: 这是一种结构体类型,它包括num, name, sex, age, score, addr等不同类型的数据项。应当说明Student是一个类型名,它和系统提供的标准类型(如int、char、float、double 一样,都可以用来定义变量,只不过结构体类型需要事先由用户自己声明而已。
声明一个结构体类型的一般形式为
struct 结构体类型名{成员表列};
结构体类型名用来作结构体类型的标志。上面的声明中Student就是结构体类型名。大括号内是该结构体中的全部成员(member),由它们组成一个特定的结构体。上例中的num,name,sex,score等都是结构体中的成员。在声明一个结构体类型时必须对各成员都进行类型声明即类型名成员名;每一个成员也称为结构体中的一个域(field)。成员表列又称为域表。
成员名的定名规则与变量名的定名规则相同
声明结构体类型的位置一般在文件的开头,在所有函数(包括main函数)之前,以便本文件中所有的函数都能利用它来定义变量。当然也可以在函数中声明结构体类型。
在C语言中,结构体的成员只能是数据(如上面例子中所表示的那样)。
C++对此加以扩充,结构体的成员既可以包括数据(即数据成员),又可以包括函数(即函数成员),以适应面向对象的程序设计。
如下:
第一种:只有结构体定义:
1. struct stuff{
2.char job
3. int age
4. float height
5. }
第二种:附加该结构体类型的“结构体变量”的初始化的结构体定义:
1. //直接带变量名Huqinwei
2. struct stuff{
3. char job[20]
4. int age
5. float height
6. }Huqinwei
也许初期看不习惯容易困惑,其实这就相当于:
1. struct stuff{
2. char job
3. int age
4. float height
5. }
6. struct stuff Huqinwei
第三种:如果该结构体你只用一个变量Huqinwei,而不再需要用。
struct stuff yourname 去定义第二个变量。那么,附加变量初始化的结构体定义还可进一步简化出第三种:
1. struct{2. char job
3. int age
4.float height
5. }Huqinwei