1.结构体类型的定义
struct 结构体类型名
{
成员说明列表(类型符 成员名;)
};
例:struct student
{
int number;//整型
int age;
char sex;//字符型
float score;//浮点型
char addr[40];//数组类型
};
上例说明结构体类型struct student 有6个成员,分别命名为num,name,sex,age,score和addr。这6个成员分别表示学生的学号、姓名、性别、年龄、成绩和家庭住址,显然它们的类型是不同的。
注:结构体类型可以嵌套定义,既一个结构体类型中的某些成员又是其他结构体类型。但是这种嵌套不能包含自身,既不能由自己定义自己。
2.结构体类型变量
2.1结构体类型变量的定义
要定义一个结构体类型的变量,可以采取以下3种方法。
1.先定义结构体类型,再定义结构体变量
如上面已经定义了一个结构体类型 struct student,可以用它来定义变量。例如:
struct student stud1,stud2;
定义stud1和stud2为 struct student 类型变量, 即它们是具有 struct student 类型的结构体变量。
为了使用方便,人们通常用一个符号常量代表一个结构体类型。在程序开头,加上命令:
#define STU_TYPE struct student
这样在程序中,STU_TYPE与struct student完全等效。
例:
STU_TYPE
{
int number;//整型
int age;
char sex;//字符型
float score;//浮点型
char addr[40];//数组类型
};
然后就可以直接用STU_TYPE定义变量。例如:STU_TYPE stud1,stud2;
2.在定义结构体类型的同时定义结构体变量
这种定义方法的一般形式为:
struct 结构体类型名
{
成员说明列表(类型符 成员名;)
}变量名列表;
例: struct student
{
int number;//整型
int age;
char sex;//字符型
float score;//浮点型
char addr[40];//数组类型
}stud1,stud2;
它的作用与前面定义的相同。即定义了两个struct student 类型的变量stud1和stud2。
3.直接定义结构体类型变量
这种定义方法的一般形式为:
struct
{
成员说明列表(类型符 成员名;)
}变量名列表;
2.2结构体类型变量的使用
引用一个结构体变量有两种方式:通过结构体变量名和通过指向结构体的指针变量。与之对应的,引用结构体成员的标记形式有两种,分别用运算符“.”和“->”来标记。 (1)由结构体变量名引用其成员的标记形式为:
结构体变量名.成员名
例如:stud.num = 20312;
(2)由指向结构体的指针变量引用结构体成员的标记形式为:
指针变量名->成员名
例如:struct node
{
float x,y;
}p,u,*pt;
pt->x=23.7,pt->y=3.4
(3)初始化结构体
例如:struct student jack={
.name = "jack",
.num = 2012013822;
.age = 18;
.sex = "男";
};
1.结构体与函数实例
例:有一个结构体变量stu,内含学生学号、姓名和3门课的成绩。要求在main函数中给变量赋值,在另一个函数print中将它们打印输出。
<span style="font-size:18px;">struct student
{
long num;
char name[20];
float score[3];
}
void main()
{
void print(struct student *);
struct student stu;
stu.num = 3021210;
strcpy(stu.name,"LI Dong");
stu.score[0] = 67.5;
stu.score[1] = 89;
stu.score[3] = 78.6;
print(&stu);
}
void print(struct student *p)
{
printf("%ld\n%s\n%f\n%f\n%f\n",p->num,p->name,p->score[0],p->score[1],p->score[2]);
printf("\n");
}</span>
程序运行结果如下:
3021210
Li Dong
67.500000
89.000000
78.599998