结构体
1. 结构体定义
struct teacher{
char name[20];
int age;
char email[50];
};
2. 声明结构体变量
struct teacher teacher1;
- 另一种方式:定义时声明结构体变量
struct teacher{
char name[20];
int age;
char email[50];
}teacher1, teacher2, teacher3, *teacher4;
3. 初始化结构体变量
- 声明时初始化
struct teacher teacher1 = {"Zhangshan", 18, "zhangshan@gamil.com"};
- 定义结构体、声明结构体变量时初始化
struct teacher{
char name[20];
int age;
char email[50];
}teacher1 = {"Zhangshan", 18, "zhangshan@gamil.com"};
4. 访问结构体成员
- 操作符
.
- 操作符
->
(适用于指向结构体的指针)
#include <stdio.h>
#include <conio.h>
struct teacher {
char name[20];
int age;
char email[50];
};
int main() {
struct teacher teacher1 = { "Zhangshan", 18, "zhangshan@gamil.com" };
struct teacher* teacher2 = &teacher1;
printf("name: %s\nage: %d\nemail:%s\n", teacher1.name, teacher1.age, teacher1.email);
printf("name: %s\nage: %d\nemail:%s\n", teacher2->name, teacher2->age, teacher2->email);
return 0;
}
5. 结构体变量赋值
可以使用赋值操作符
=
将结构体A赋值给结构体B.
teacher3 = teacher1;
6. 结构体嵌套
结构体的数据成员也是结构体。
struct student{
char name[20];
struct ScoreStruct{
int math;
int English;
}score;
struct InfoStruct{
float height;
float weight;
}info;
};
- 更好理解
struct ScoreStruct{
int math;
int English;
};
struct InfoStruct{
float height;
float weight;
};
struct student{
char name[20];
ScoreStruct score;
InfoStruct info;
};
说明
结构体A中定义结构体B,则在结构体A外是不可见的,即:只能在A中声明B的结构体变量。
struct student {
char name[20];
struct ScoreStruct {
int math;
int English;
};
struct InfoStruct {
float height;
float weight;
};
};
和下边的代码等价
struct student {
char name[20];
int math;
int English;
float height;
float weight;
};
7. 匿名结构体
不指定结构体名称,但是需要至少声明一个结构体变量。
可直接访问(person1.name
),但是以后的程序中不能声明这种类型的变量。
struct{
char name[20];
int age;
}person1, person2;