struct Student{int number;//学号为整型char name[20];//姓名为字符串char sex;//性别为字符型int age;//年龄为整型float score;//成绩为实型char addr[30];//地址为字符串}
上面程序指定了一个结构体类型struct Student(struct是声明结构体类型时必须使用的关键字,不能省略),声明一个结构体类型的一般形式为:
struct 结构体{成员表列};
花括号内是该结构体所包括的子项,称为结构体的成员,上述的number,name,sex等都是成员。对各成员都应进行类型声明,即
类型名 成员名;
成员可以属于另一个结构体类型,例如:
struct Date{//声明一个结构体类型struct Dateint month;//月int day;//日int year//年}struct Student{int num;char name[20];char sex;int age;struct Date birthday;//成员birthday属于struct Date类型char addr[30];}
2、定义结构体类型变量 (1)先声明结构体类型,再定义该类型变量struct Student student1,student2;结构体类型名 两个结构体变量名
这种形式和定义其他类型的变量形式(如, int a,b;)是相似的。上面定义了student1和student2为struct Student类型的变量,这样student1 和 student2 就具有struct Student类型的结构。
(2)在声明类型的同时定义变量 例如:struct Student{int num;char name[20];char sex;int age;float score;char addr[30];} student1,student2;
它的作用与第一种方法相同,但是定义struct Student 类型的同时定义两个struct Student 类型的变量student1 和 student2,这种定义方法的一般形式为
struct 结构体名{成员表列}变量名表列;
(3)不指定类型名而直接定义结构体类型变量其一般形式为
struct{成员表列}变量表列;
3、结构体变量的初始化和引用在定义结构体变量时,可以对它初始化,即赋予初始值。然后可以引用这个变量,例如输出它的成员的值。
例题1:把一个学生的信息(包括学号、姓名、性别、住址)放在一个结构体变量中,然后输出这个学生的信息。#include
struct Student b={.name="Zhang san"};
".name"隐含代表结构体变量b的成员b.name。其他未被指定初始化的数值型成员被系统初始化为0,字符型成员被系统初始化为’’,指针型成员被系统初始化为NULL。
(2)可以引用结构体变量中的成员的值,引用方式为结构体变量名.成员名在程序中可以对变量的成员赋值,例如:student1.num=10010;
(3)如果成员本身又属一个结构体类型,则要用若干个成员运算符,一级一级地找到低的一级的成员。只能对最低级的成员进行赋值或存取以及运算。如果在结构体struct Student类型的成员中包含另一个结构体struct date类型的成员birthday,则引用成员的方法为student1.num//结构体变量student1中的成员numstudent1.birthday.mounth//结构体变量student1中的成员birthday中的成员month
不能用student1.birthday来访问student1变量中的成员birthday,因为birthday本身是一个结构体成员。
(4)对结构体变量的成员可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算)。例如student2.score=student1.score;//赋值运算sum=student1.score+student2.score;//加法运算student1.age++;//自加运算
(5)同类的结构体变量可以互相赋值,如:student1=student2;
(6)可以引用结构体变量成员的地址,也可以引用结构体变量的地址。例如:scanf("%d",&student1.score);//输入student1.score的值printf("%o",&student1);//输出结构体变量student1的起始地址
例题2:输入两个学生的学号、姓名和成绩,输出成绩较高的学生的学号、姓名和成绩。#include
#include
1.struct 结构体名{成员表列} 数组名[数组长度];2.先声明一个结构体类型(如 struct Person),然后再用此类型定义结构体数组:结构体类型数组名[数组长度];如:struct Person leader[3];
(2)对结构体数组初始化的形式是在定义数组的后面加上:={初值表列};struct Person leader[3]={"zhangsan",0,"lisi",0,"wangwu",0};
例题4:有n个学生的信息(包括学号、姓名、成绩),要求按照成绩的高低顺序输出各学生的信息#include