引言:
C语言提供了一些有系统定义好的数据类型,如char,int,double.用户可以定义变量来解决一般的数据问题,但大多数处理的问题比较复杂只使用系统提供的数据类型难以满足解决问题的需求,C语言允许用户自己建立一些数据类型,并用它来定义变量.
1.定义和使用结构体变量
C语言允许用户自己建立一些由不同类型组成的组合型的数据结构,称为结构体.
1.1建立结构体类型
格式:
struct 结构体名
{成员表列}; //注意分号不可丢
对成员表列要进行类型声明:
类型名 成员名;
例://学生数据模型
struct student
{
int num; //学号为整型
char name[20]; //姓名为字符型
char sex; //性别为字符型
int math; //成绩为整形
int English;
}; /注意分号不可丢
1.2定义结构体变量
1.2.1 先声明结构体类型,再定义该类型的变量
例如:
struct student student1,stdent2;
结构体类型名 结构体变量名
1.2.2 在声明类型的同时定义变量
格式:
struct 结构体名
{
成员表列
};变量名表列
例如:
struct student
{
int num;
char name[20];
char sex;
int math;
int English;
} student1,stdent2;//注意分号位置.
1.2.3 不指定类型名而直接定义结构体类型变量
格式:
struct
{
成员表列
}变量名表列;
例如:
struct
{
int num;
char name[20];
char sex;
int math;
int English;
} student1,stdent2;
该结构体没有名字不能再以此结构体类型去定义其他变量.这种方式用的不多
1.3 结构体变量的初始化和引用
1.3.1 直接初始化
例如:
struct student
{
int num;
char name[20];
char sex;
int math;
int English;
} student1={190102013,“xiaowang”,75,61};
C99标准允许对某一成员初始化如:
struct stdudent b={.name=“xiaowang”};//在成员名前须有成员运算符.
1.3.2 结构体成员的引用
格式:
结构体变量名.成员名
例如:
student1.math=75;
printf("%d",student1.math);//结构体成员的输出方式.
1.4 使用结构体数组
格式:
struct 结构体名
{
成员表列
};数组名[数组长度];
声明结构体后 加:
结构体类型 数组名[数组长度]
如:
struct stdudent a[3]={依次给各成员赋值};
2.结构体指针
2.1 指向结构体变量的指针
格式:
struct student *pt;//pt可以指向struct student类型的变量或数组元素
2.2指向结构体数组的指针
p++:使p自加一所增加的值为结构体数组一个元素所占的字节数.
(pt).成员名与pt->成员名与stu.成员名等价关系
结构体成员运算符 . 高于指针运算符 * ,所以pt需加括号
/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
struct student
{
int num;
char name[20];
}stu1={13,"xiaowang"},stu2={16,"xiaosu"},*pt,
stu[2]={102006,"xiaosong",102028,"xiaochi"};//数组的初始化
pt=&stu1;
printf("%d,%s\n",stu1.num,pt->name);
printf("%d,%d\n",stu1.num,*pt);//此时*p=stu1.num
pt=&stu[0];//数组名代表数组元素的首地址
printf("%d,%s\n",stu[0].num,(*pt).name);//(*pt).name与pt->name等价关系
printf("%d,%s\n",stu[1].num,(*++pt).name);//pt加的值为结构体数组一个元素所占的字节数
}