定义和使用结构体
建立结构体类型
C语言的结构体即是由不同类型的数据组成的组合型的数据结构,在其他高级语言中称为“记录(record)”。
声明一个结构体类型的一般形式为
struct 结构体名
{成员表列};
结构体类型名 由 struct + 结构体名 组成
结构体名是由用户指定的,以区别于其他结构体
成员表列 也叫 域表,每个成员的是结构体中的一个域。成员命名规则和变量名相同。其他的结构体也可做为该结构体的变量。
如:
struct Person {
char name[20]; //姓名
int age; //年龄
char gender; //性别
float height; //身高
};
定义结构体类型变量
1.先声明结构体类型,再定义该类型的变量
struct 结构体名
{成员表列};
struct 结构体名 结构体变量名;
如:
先声明:
struct Person {
char name[20] //姓名
int age; //年龄
char gender; //性别
float height; //身高
};
再和定义其他变量一样定义结构体变量
struct Person person1, person2;
2.在声明类型的同时定义变量
struct 结构体名
{成员表列
}结构体变量名表列;
如:
struct Person {
char name[20]; //姓名
int age; //年龄
char gender; //性别
float height; //身高
} person1, person2;
3.不指定类型名而直接定义结构体类型变量
struct
{成员表列
}结构体变量名表列;
这指定了一个无名的结构体类型,不能再以此结构体类型去定义其他变量,所以会被用于此结构体确定不会再被用于其他变量时。
如:
struct {
char name[20]; //姓名
int age; //年龄
char gender; //性别
float height; //身高
}Tonytony;
结构体变量的初始化和引用
(1)在定义时初始化
struct Person person1 = {.name = “LiHua”};
(2)引用结构体变量中的成员值
person1.name = “LiHua”;
person1.age = 20;
(3)同类型的结构体变量可以互相赋值
person1 = person2;
(4)不能整体读入结构体变量
scanf("%s, %d, %c, %f", &person1);
结构体数组
定义结构体数组也可以
struct 结构体名
{成员表列};
struct 结构体名 数组名[长度];
struct Person {
char name[20]; //姓名
int age; //年龄
char gender; //性别
float height; //身高
};
struct Person person[3];
或者
struct 结构体名
{成员表列
};数组名[长度]
struct Person {
char name[20]; //姓名
int age; //年龄
char gender; //性别
float height; //身高
} person[3];
结构体指针
指向结构体变量的指针
指向结构体的指针既可以指向结构体变量,也可以指向结构体数组中的元素。指针变量的基类型必须与结构体变量相同
如:
struct Person *pe;
pe = &person;
person.age = 20;
printf(“age is %d”, (*pe).age);
输出为 age is 20
还可以用 pe->age 代替 (*pe).age
" -> " 代表箭头, pe->age 表示 pe 指向结构体变量中的成员 age
当 pe 指向一个结构体变量 person 时,以下3种用法等价。
- person.age
- (*pe).age
- pe->age