结构体
1、结构体的定义
结构体是不同数据类型的集合
写法:
struct 结构体名{
成员列表(类型名 成员名)
};
//以上共同称为结构类型
//例如
struct student{
int ID;
char name[20];
};
注意:
- 结构体类型与结构体变量是两个不同的概念,其区别如同int类型与int型变量的区别一样。
- int x = 10;
- struct student stu;
- 结构类型中的成员名,可以与程序中的变量同名,它们代表不同的对象,互不干扰。
#include <stdio.h>
struct student{
int ID;
char name;
struct teacher{
int age;
}th;
};
//typedef struct student{
// int ID;
// char name;
//}stu;
int main(){
int ID = 10;
struct student stu;
stu.ID = 666;
stu.name = 'd';stu.th.age = 18;
// stu stt = {123. 'a'};
//第二种赋值方式
//struct student stu = {10, 'd'};
printf("stu.id = %d, sut.name = %c\n", stu.ID, stu.name);
return 0;
}
- 结构类型中的数据项,既可以是基本数据类型,也可以是结构体类型
2、结构体的使用
- 对于上一个struct student的结构体,使用如下:
struct student stu; //定义
//使用如下
stu.id = 666;
stu.name = 'd';
或者使用如下方式:
struct student stu = {10, 'd'}; //这是在定义的时候赋的初值
- 直接定义一个变量,省略
struct student stu;
这一条语句
struct student{
int ID;
char name;
}stu;
- 语言中用关键字
typedef
可以为数据类型定义一个别名。如typedef int INTEGER;
,则标识符INTEGER
就是int
的一个别名,两者可以互换使用。
typedef struct student{
int ID;
char name;
}stu;
//这时的stu不是变量名,而是类型名,可以用来定义结构体变量
stu danny;
danny.ID = 666;
3、结构体指针
通过指向结构变量的指针来访问结构变量的成员,与直接使用结构变量的效果一样。一般来说,如果指针变量pointer已指向结构变量var,则一下两种形式等价:
var.成员
pointer->成员
注意(左侧是变量用分量运算符,指针用指向运算符):
(1)分量运算符.
左侧的运算对象,只能是结构变量,不能是指针。
(2)指向运算符->
左侧的运算对象,只能是指向结构变量(或结构数组)的指针变量,否则都出错。
#include <stdio.h>
typedef struct student{
int ID;
char name;
}stu;
int main(){
int ID = 10;
stu stt = {123. 'a'};
printf("stu.id = %d, sut.name = %c\n", stu.ID, stu.name);
stu* Pstu = &stt;
Pstu -> ID = 666;
printf("stu.id = %d, sut.name = %c\n", stu.ID, stu.name);
return 0;
}
补充:
.
直接分量选择 双目操作符
->
间接分量选择 双目操作符
4、结构体数组
结构体数组就是数组里面放的是结构体
struct student{ int ID, age; }stu[10];
使用
stu[0].ID = 20; stu[0].age = 18; stu[1].ID = 15;