C中的结构体

使用 C 语言复习数据结构的时候,最常用到的 C 语言中的两个对于初学者容易弄不明白的概念一个是指针 Pointer,另一个就是结构体 Struct了,这里专门整理并系统复习了 C 语言中结构体相关概念与使用

定义结构

C 中一个结构体定义如下

1
struct tag { member-list } variable-list ;

其中struct为结构体关键字,tag为结构体的标志,member-list为结构体所有成员声明,variable-list为结构体声明变量,在声明成员变量时只能声明变量类型与变量名称,不能初始化值

定义举例

这里具几例结构体定义的方法

前无标志,后有声明

1
2
3
4
5
struct{
int a;
char b;
double c;
} s1;

这个结构体拥有三个成员,但是没有指明其标签,声明了结构体变量为 s1,这样可以直接使用s1来访问这个结构体,但是后面无法在声明新的结构体变量

前有标志,后无声明

1
2
3
4
5
6
7
struct SIMPLE{
int a;
char b;
double c;
};
//声明
struct SIMPLE t1, t2[20], *t3;

这个结构体同样拥有三个成员,虽然在定义结构时没有顺便声明变量,但是后面可以使用struct [tag]来声明变量,这里使用struct SIMPLE t1, t2[20], *t3声明了三个变量,分别为单个结构体,结构体数组,和指向单个结构体的指针

使用 typedef 定义

1
2
3
4
5
6
7
typedef struct Simple{
int a;
char b;
double c;
} Simple2;
//声明
Simple2 u1, u2[20], *u3;

使用typedef声明结构体后,后面的Simple2就不再像前面的是声明一个此结构体变量了,而是可以直接通过Simple2 [name]来在后面声明新的此结构体变量。这里Simple2相当于struct Simple

更多 typedef 定义

1
2
3
4
5
6
7
8
9
10
11
12
13
typedef struct Student{
int age;
}stu,*pstu,stus[10];

//声明一个结构体变量
stu s1;
s1.age=10;
//声明一个结构体指针
pstu s2;
s2->age=10;
//声明一个结构体数组
stus s3;
s3[0].age=10

这里在使用typedef声明一个Student结构体后,还使用stu, *pstu, stus[10]以让我们在后面方便的使用stu, pstu, stus分别声明一个结构体变量,结构体指针,结构体数组

结构体的访问

对于结构体变量类型的不同,有两种对结构体成员的访问方式,直接访问间接访问,直接访问作用于普通变量,间接访问作用于结构体指针变量

1
2
3
4
5
6
7
8
9
10
11
12
struct SIMPLE{
int a;
char b;
};
//声明结构体变量s1,和指向结构体变量的指针s2
struct SIMPLE s1, *s2;
//对于普通结构体变量使用点操作 . 来访问成员
s1.a = 5;
s1.b = 6;
//对于结构体指针使用箭头符号 -> 来访问成员
s2->a = 3;
s2->b = 4;