结构体
一个或多个变量的集合,这些变量的类型可以不同。为了处理方便将变量组织在一个名字下。
例如:统计某班学生的信息(包括学号、姓名、成绩),每个学生需要至少三个变量,如果学生人数较多,那需要的变量就非常多了。这就用到结构体了。
结构体定义
struct Student{
int num;
char name[20];
int score;
};
struct为关键字,student为结构体的类型名,num,name,score为结构体的成员。
分号一定要加,分号前面可以加结构体变量,如下
struct Student{
int num;
char name[20];
int score;
}Zhangsan;
敲重点!!!上面类似于变量的声明
定义结构体变量
方式一: 先定义结构体类型,再定义变量
struct Student{
int num;
char name[20];
int score;
};
struct student Zhangsan;
方式二:在定义结构体类型同时,定义变量
struct Student{
int num;
char name[20];
int score;
}Zhangsan, Lisi;
方式三:typedef重定义结构体类型名(推荐!!!)
typedef struct Student{
int num;
char name[20];
int score;
}students;
Students Zhangsan, Lisi;
方式四:省略结构体类型名
struct {
int num;
char num[20];
int score;
}Zhangsan, Lisi;
不能再增加变量。
结构体变量的初始化
struct Student{
int num;
char name[20];
int score;
};
struct student Zhangsan = {1011, "Zhangsan", 89};
扩展示例
struct Block{ WORD dir[4]; COLORREF color; }g_Blocks[3] = { {0x0F00, 0x4444, 0x0F00, 0x4444, RED}, {0x0660, 0x0660, 0x0660,0x0660, BLUE}, {0x4460, 0x02E0, 0x0622, 0x0740, MAGENTA} };
结构体变量的应用
结构体变量成员的引用:结构体变量名.成员名
Zhangsan.num = 1011;
scanf("%d", &Zhangsan.score);
printf("%d %d\n", Zhangsan.num, Zhangsan.score);
- 当结构体变量的成员也是结构体类型时,引用必须是最底层的成员变量,如下
3. 成员名可与程序中的变量名同名,二者代表不同对象
- 、可以引用结构体变量成员的地址,也可以引用结构体变量的地址,例如:
scanf("%d", &A.num); //输入A.num的值
printf("%d", &A); //输出Bob的首地址
目的:主要用作函数参数,传递结构体变量的地址。
5、允许具有相同类型的结构变量可以相互赋值,其它情况不允许对结构变量直接赋值。