- 概述
- 定义结构体类型变量的方法
- 结构体变量的引用
- 结构体变量的初始化
- 结构体数组
- 指向结构体类型数据的指针
- 用指针处理链表
- 共用体
- 枚举类型
- 用 typedef定义类型
概述
定义一个结构体的一般形式:
struct 结构名 { 成员列表 };
一个结构体有一个结构名,但不是必须的。成员列表有若干个成员组成,每个成员都是该结构的一个组成部分。对每个成员也必须作类型说明,其形式为: 类型说明符 成员名;
例如:
// 学号、姓名、性别、年龄、地址等属性 struct Student { int num; char name[20]; char sex; int age; char addr[30]; };
定义结构体类型变量的方法
在定义了结构体变量后,系统会位置分配内存单元。
可以采用三种方法定义结构体类型变量:
1)先声明结构体类型再定义变量名;
struct Student person1; struct Student person2;
则,person1、person2 具有struct Student类型的结构。
2)在声明类型的同时定义变量
struct Student { int num; char name[20]; char sex; int age; char addr[30]; } student1, student2;
3)直接定义结构体类型变量,即不出现结构体名
struct { int num; char name[20]; char sex; int age; char addr[30]; } student1;
结构体可以嵌套:例如:
struct date { int month; int day; int year; }; struct Student { int num; char name[20]; char sex; int age; char addr[30]; struct date birthday; // date结构体 };
结构体变量的引用
在定义了结构体变量以后,若要引用这个变量,必须遵守以下规则:
1)不能将一个结构体变量作为一个整体进行输入和输出。
正确引用方法:结构体变量名.成员名
示例:
printf(" %d %s %c %d %d %d %.2f ", student1.num, student1.name, student1.sex, student1.birthday.year, student1.birthday.month, student1.birthday.day, student1.score);
student1.num = 100;
"."是成员(分量)运算符,它在所有的运算符中优先级最高。因此可以把student1.num等作为一个整体来看待。上面赋值语句的作用是将整数100赋给student1变量中的成员num。
struct Student student1 = {21, "Kingdev", 'f', {2016, 3, 28}, 90.f}; struct Student student2 = {10, "Learning", 'm', {2010, 10, 10}, 80.f}; student1 = student2; // 整体赋值 printf(" %d %s %c %d %d %d %.2f ", student1.num, student1.name, student1.sex, student1.birthday.year, student1.birthday.month, student1.birthday.day, student1.score);
打印出的结果为变量 student2 的值。
2)如果成员本身又属于一个结构体类型,则要用若干个成员运算符一级一级的找到最低的一级的成员。只能对最低级的成员进行赋值或存取以及运算。如:
student1.birthday.year, student1.birthday.month, student1.birthday.day
3)对结构体变量的成员可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算)
如:
// 计算两位学生的分数和 float sum = student1.score + student2.score;
4)可以引用结构体变量成员的地址,也可以引用结构体变量的地址;
结构体地址和结构体第一个元素地址是一致的。结构体变量的地址主要用作函数的参数,传递结构体变量的地址。
printf("student1 Address - %p ", &student1); printf("student1 first Ele - %p ", &student1.num); // 打印结果 student1 Address - 0x7fff5fbff7b0 student1 first Ele - 0x7fff5fbff7b0
结构体变量的初始化
尊重作者劳动成果,转载请注明: 【kingdev】